Java笔记:包装类、toString()方法、单例类、比较(==和equals方法)
1.包裝類
1)包裝類為基本數(shù)據(jù)類型提供了相應(yīng)的引用數(shù)據(jù)類型。
(基本數(shù)據(jù)類型-包裝類)
btye-Byte,char-Character,short-Short,float-Float
int-Integer,double-Double,long-Long,boolean-Boolean
2)通過包裝類的構(gòu)造器來實(shí)現(xiàn)吧基本數(shù)據(jù)類型包裝成包裝類
3)可以通過使用包裝類的xxxValue()實(shí)例方法,可以獲得包裝類對象中包裝的基本數(shù)據(jù)類型。
package cn.it.lsl;public class Primitive2Wrapper {public static void main(String[] args) {boolean b = true;Boolean b1 = new Boolean(b);int a = 5;Integer a1 = new Integer(a);//把一個字符串包裝成包裝類 (Character類除外)Float f = new Float("2.3");Boolean b2 = new Boolean("false");boolean b3 = b2.booleanValue();System.out.println(b3);int aa = a1.intValue();System.out.println(aa);//當(dāng)用一個字符串來創(chuàng)建Boolean對象時,如果傳入的是字符串"true",或或次字符串不同字母的大小寫變化形式,如"True",都將創(chuàng)建true對應(yīng)的Boolean對象//當(dāng)傳入其他字符串時,都會創(chuàng)建false對應(yīng)的Boolean對象Boolean b4 = new Boolean("true");boolean b5 = b4.booleanValue();System.out.println(b5);} }4)以上的轉(zhuǎn)換比較麻煩,在JDK1.5中提供了自動裝箱和自動拆箱功能實(shí)現(xiàn)包裝類跟基本數(shù)據(jù)類型的轉(zhuǎn)換。
自動裝箱:把基本數(shù)據(jù)類型直接賦值給對應(yīng)的包裝類
自動拆箱:把包裝類直接賦值給對應(yīng)的基本數(shù)據(jù)類型
eg:
5)包裝類還可以實(shí)現(xiàn)基本類型和字符串之間的轉(zhuǎn)換。
把字符串類型的值轉(zhuǎn)換為基本類型的值
(1)利用parseXxx(String s)方法(Charcater除外)
(2)利用包轉(zhuǎn)類提供的構(gòu)造器
把基本類型轉(zhuǎn)為字符串
(1)String類的valueOf()
(2)基本類型和""進(jìn)行連接運(yùn)算
6)包裝類的比較
(1)包裝類可以與基本數(shù)據(jù)類型比較
(2)因?yàn)榘b類是引用數(shù)據(jù)類型,所以只有兩個包裝類指向用一個對象的時候才會返回true
7)包裝類比較的特殊情況
自動裝箱的結(jié)果
分析:以上程序,當(dāng)兩個2自動裝箱后,比較相等,但是兩個128自動裝箱后就不相等。
這是因?yàn)橄到y(tǒng)內(nèi)部提供了一個緩存功能,把-128~127之間的整數(shù)自動裝箱成一個Integer時,實(shí)際上直接指向?qū)ο蟮臄?shù)值元素,而-128~127范圍外的整數(shù)自動裝箱成Integer時,總是新創(chuàng)建一個Integer實(shí)例。
2.toString()方法
toString()是Object類里面的一個實(shí)例方法,因?yàn)樗械念惗际荗bject的子類,所以所有的Java對象都具有toString()方法。
當(dāng)打印一個對象的時候,總是會調(diào)用toString()方法。在缺省狀態(tài)下,其輸出時類名、符號名@、對象的hashCode()值。
輸出:cn.it.lsl.ToStringWithout@bb0d0d
package cn.it.lsl; //覆蓋toString()方法 public class ToStringWith {int x;int y;public ToStringWith(int x, int y){this.x = x;this.y = y;}public String toString(){return "ToStringWith[" + x + "," + y + "]";}public static void main(String[] args) {System.out.println(new ToStringWith(23,33));} }輸出:ToStringWith[23,33]
3.單例類
有時候,不允許自由創(chuàng)建一個類的實(shí)例,而只允許該類創(chuàng)建一個對象,這就是單例類。
1)創(chuàng)建單例類的方法
(1)要把構(gòu)造器使用private修飾,這樣就能避免其他類自由創(chuàng)建該類的實(shí)例。
(2)提供一個public方法作為該類的訪問點(diǎn),用于創(chuàng)建對象,且該方法應(yīng)該使用static修飾。(因?yàn)檎{(diào)用該方法時候,對象還不存在,所以調(diào)用該方法的只能是類)
(3)該類中還要有一個緩存對象,用于判斷該類是否已經(jīng)創(chuàng)建過對象了,這樣才能保證只創(chuàng)建一個對象,該成員應(yīng)該也要static修飾。
4.比較(==和equals方法)
1)若使用==對兩個引用類型變量進(jìn)行比較,他們必須指向同一個對象時,==判斷才會是true。
2)當(dāng)比較兩個變量時基本類型時,且都是數(shù)值類型時,兩個值相等,就會返回true
例如:
3)"hello"直接量和new String("hello")的區(qū)別?
(1)常量池的概念:專門用于管理在編譯期被確定并被保存在已編譯的.class文件中的一些數(shù)據(jù)。
(2)當(dāng)Java程序直接使用形如"hello"的字符串直接了(包括可以在編譯時就計算出來的字符串值)時,JVM將會使用常量池來管理這些字符串。
(3)當(dāng)使用new String("hello")時,JVM會先使用常量池來管理"hello"直接量,再調(diào)用String類的構(gòu)造器來創(chuàng)建一個新的String對象,新創(chuàng)建的String對象被保存在堆內(nèi)存中。也就是new String("hello")一共產(chǎn)生了兩個對象。
JVM常量池保證相同的字符串直接量只有一個,不會產(chǎn)生多個副本。
4)equals方法
(1)equals方法是Object類提供的一個實(shí)例方法,因此所有引用變量都能調(diào)用該方法,但是該方法判斷該兩個對象相等的標(biāo)準(zhǔn)與使用==運(yùn)算符沒有區(qū)別,同樣是兩個引用變量指向同一個對象時才會返回true。
(2)String已經(jīng)重寫了Object的equals()方法,String的equals()方法判斷兩個字符串是否相等的標(biāo)準(zhǔn)是:只要兩個字符串的字符序列相同,就返回true。
(3)Object默認(rèn)提供的equals()只是比較對象的地址,多數(shù)情況下,我們需要重寫equals()方法。
?
轉(zhuǎn)載于:https://www.cnblogs.com/EvanLiu/archive/2013/06/12/3132648.html
總結(jié)
以上是生活随笔為你收集整理的Java笔记:包装类、toString()方法、单例类、比较(==和equals方法)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: r语言 小树转化百分数_“小树”机器人1
- 下一篇: 上新:视频加密功能增加防录屏(随机水印)