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