基本類型與封裝類的最大區(qū)別是,封裝類是引用類型,其實問題就是基本類型和引用類型的區(qū)別。基本類型在內(nèi)存中是存儲在棧中,引用類型的引用(值得地址)存儲在棧中,而值是存儲在堆中。
基本類型與其封裝類型對應的關系如下:
byte------Byte; short------Short; int------Integet; long------Long; float------Float; double------Double; boolean------Boolean; char------Character
基本類型的值轉(zhuǎn)化成封裝類對象時,有兩種方法:
v 直接用new方法創(chuàng)建封裝類對象,參數(shù)為基本類型的值。
v 使用封裝類的valueOf靜態(tài)方法,參數(shù)為基本類型的值,返回封裝類對象。
封裝類轉(zhuǎn)換為基本類型的值時,有一種方法:
使用封裝類對象的xxxValue實例方法,返回它的基本類型值。
// 基本類型byte轉(zhuǎn)換為包裝類型的方法 PRivate Byte byte2Byte(byteb) { Byte by = new Byte(b); // Byte by =Byte.valueOf(b); return by; } // 包裝類型Byte裝換位基本類型 private byte Byte2byte(Byteb) { if (b == null) { return 0; } else { return b.byteValue(); } }4.2Object類4.3字符串類
1.Object類與其他類的關系?
Object類是一切java類的父類,對于普通的java類,即便不聲明,也是默認繼承了Object類。典型的,可以使用Object類中的toString()方法
1. Object類與基本數(shù)據(jù)封裝類、自定義類各自的equals方法與“==”的含義?
值類型是存儲在內(nèi)存中的堆棧(以后簡稱棧),而引用類型的變量在棧中僅僅是存儲引用類型變量的地址,而其本身則存儲在堆中。
==操作比較的是兩個變量的值是否相等,對于引用型變量表示的是兩個變量在堆中存儲的地址是否相同,即棧中的內(nèi)容是否相同。 equals操作表示的兩個變量是否是對同一個對象的引用,即堆中的內(nèi)容是否相同。
==比較的是2個對象的地址,而equals比較的是2個對象的內(nèi)容。顯然,當equals為true時,==不一定為true。
1. String與StringBuffer的區(qū)別?
在java中有3個類來負責字符的操作。
1.Character 是進行單個字符操作的,
2.String對一串字符進行操作。不可變類。
3.StringBuffer 也是對一串字符進行操作,但是可變類。
String:
是對象不是原始類型. 為不可變對象,一旦被創(chuàng)建,就不能修改它的值. 對于已經(jīng)存在的String對象的修改都是重新創(chuàng)建一個新的對象,然后把新的值保存進去. String 是final類,即不能被繼承.
StringBuffer:
是一個可變對象,當對他進行修改的時候不會像String那樣重新建立對象 它只能通過構造函數(shù)來建立,
StringBuffer sb = new StringBuffer();note:不能通過付值符號對他進行付值.
sb = "welcome to here!";//error對象被建立以后,在內(nèi)存中就會分配內(nèi)存空間,并初始保存一個null.向StringBuffer 中付值的時候可以通過它的app end方法.
sb.append("hello");字符串連接操作中StringBuffer的效率要比String高:
String str = new String("welcome to"); str+= "here";的處理步驟實際上是通過建立一個StringBuffer,然后調(diào)用append(),最后 再將StringBuffer toSting();
這樣的話String的連接操作就比StringBuffer多出了一些附加操作,當然效率上要打折扣. 并且由于String對象是不可變對象,每次操作Sting 都會重新建立新的對象來保存新的值. 這樣原來的對象就沒用了,就要被垃圾回收.這也是要影響性能的.
2. String類常用的方法有哪些?
3. String類型的數(shù)據(jù)與基本數(shù)據(jù)類型直接如何轉(zhuǎn)換?
一、基本數(shù)據(jù)類型to字符串類型(包含char類型)
(1)toString
①基本數(shù)據(jù)類型的都有一個靜態(tài)方法toString(),轉(zhuǎn)換時可以采用 "封裝類型.toString(對應的基本數(shù)據(jù)類型字面值)" 方法來轉(zhuǎn)換成字符串。
例:將int類型的20轉(zhuǎn)成字符串,
String s = Int.toString(20)②將基本數(shù)據(jù)類型封裝成相應的封裝類型對象,采用 "基本數(shù)據(jù)類型對象.toString()"方法轉(zhuǎn)換成字符串。
例:將double類型的425.0轉(zhuǎn)成字符串,
Double d = new Double(425.0); String s =d.toString();(2)+"",將基本數(shù)據(jù)類型字面值與空字符串""通過"+"連接
例:將long類型的200轉(zhuǎn)成字符串,
String s = 200 + "";(3)valueOf,利用String類的靜態(tài)方法valueOf()。
例:將char類型的'b'轉(zhuǎn)成字符串,
String.valueOf('b');二、字符串to基本數(shù)據(jù)類型(不包含char類型)
(1)利用基本數(shù)據(jù)類型包裝類的parseXxx方法
例:將字符串"123"轉(zhuǎn)成int類型,
int i =Integer.parseInt("123");(需注意字符串轉(zhuǎn)成基本數(shù)據(jù)類型時字符串內(nèi)容必須是基本數(shù)據(jù)類型的字面值,否則編譯雖然能通過,但運行時出現(xiàn)NumberFormatException)
(2)用字符串構造基本類型的封裝對象,再調(diào)用封裝對象的xxxValue方法
例:將字符串"20.5"轉(zhuǎn)成double類型,
Double d1 = newDouble("20.5"); double d2 =d1.doubleValue();1. String與toString的區(qū)別?
(String)
這是標準的類型轉(zhuǎn)換,將object轉(zhuǎn)成String類型的值。使用這種方法時,需要注意的是類型必須能轉(zhuǎn)成String類型。因此最好用instanceof做個類型檢查,以判斷是否可以轉(zhuǎn)換。否則容易拋出CalssCastException異常。此外,需特別小心的是因定義為Object 類型的對象在轉(zhuǎn)成String時語法檢查并不會報錯,這將可能導致潛在的錯誤存在。這時要格外小心。如:
Object obj = new Integer(100);
String strVal = (String)obj;
在運行時將會出錯,因為將Integer類型強制轉(zhuǎn)換為String類型,無法通過。、
toString
在這種使用方法中,因為java.lang.Object類里已有public方法.toString(),所以對任何嚴格意義上的java對象都可以調(diào)用此方法。但在使用時要注意,必須保證object不是null值,否則將拋出NullPointerException異常。采用這種方法時,通常派生類會覆蓋Object里的toString()方法。
2.Object與基本數(shù)據(jù)封裝類中的toString的含義?
1.某些情況下,數(shù)據(jù)必須作為對象出現(xiàn),此時必須使用封裝類來將簡單類型封裝成對象。
比如,如果想使用List來保存數(shù)值,由于List中只能添加對象,因此我們需要將數(shù)據(jù)封裝到封裝類中再加入List。在JDK5.0以后可以自動封包,可以簡寫成list.add(1)的形式,但添加的數(shù)據(jù)依然是封裝后的對象。
另外,有些情況下,我們也會編寫諸如func(Object o)的這種方法,它可以接受所有類型的對象數(shù)據(jù),但對于簡單數(shù)據(jù)類型,我們則必須使用封裝類的對象。
2.某些情況下,使用封裝類使我們可以更加方便的操作數(shù)據(jù)。
比如封裝類具有一些基本類型不具備的方法,比如valueOf(), toString(), 以及方便的返回各種類型數(shù)據(jù)的方法,如Integer的shortValue(), longValue(), intValue()等。
3.基本數(shù)據(jù)類型與其對應的封裝類由于本質(zhì)的不同,具有一些區(qū)別:
基本數(shù)據(jù)類型只能按值傳遞,而封裝類按引用傳遞。
基本類型在堆棧中創(chuàng)建;而對于對象類型,對象在堆中創(chuàng)建,對象的引用在堆棧中創(chuàng)建。基本類型由于在堆棧中,效率會比較高,但是可能會存在內(nèi)存泄漏的問題。
4.4Scanner類
1.Scanner類的作用?如何使用?2.Scanner類的常用方法有哪些?可以用來獲取哪些類型的輸入?獲取方法分別是什么?
Scanner類,一個可以使用正則表達式來解析基本類型和字符串的簡單文本掃描器。
用于掃描輸入文本的實用程序。位于java.util包中。
使用Scanner接收鍵盤輸入的字符,步驟:
1.導入Scanner類。
import java.util.Scanner;2.創(chuàng)建Scanner對象。
Scanner input=new Scanner(System.in);3.獲得鍵盤輸入的數(shù)據(jù)。
int i=input.nextInt();Strings=input.next();doubled=s.nextDouble(); Double d=double.nextDouble(); Boolean b=boolean.hasNext();//判斷是否有輸入的數(shù)據(jù),有則返回true,沒有就返回false。
新聞熱點
疑難解答