Java笔记:包装类、toString()方法、单例类、比较(==和equals方法)
1.包裝類
1)包裝類為基本數據類型提供了相應的引用數據類型。
(基本數據類型-包裝類)
btye-Byte,char-Character,short-Short,float-Float
int-Integer,double-Double,long-Long,boolean-Boolean
2)通過包裝類的構造器來實現吧基本數據類型包裝成包裝類
3)可以通過使用包裝類的xxxValue()實例方法,可以獲得包裝類對象中包裝的基本數據類型。
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);//當用一個字符串來創建Boolean對象時,如果傳入的是字符串"true",或或次字符串不同字母的大小寫變化形式,如"True",都將創建true對應的Boolean對象//當傳入其他字符串時,都會創建false對應的Boolean對象Boolean b4 = new Boolean("true");boolean b5 = b4.booleanValue();System.out.println(b5);} }4)以上的轉換比較麻煩,在JDK1.5中提供了自動裝箱和自動拆箱功能實現包裝類跟基本數據類型的轉換。
自動裝箱:把基本數據類型直接賦值給對應的包裝類
自動拆箱:把包裝類直接賦值給對應的基本數據類型
eg:
5)包裝類還可以實現基本類型和字符串之間的轉換。
把字符串類型的值轉換為基本類型的值
(1)利用parseXxx(String s)方法(Charcater除外)
(2)利用包轉類提供的構造器
把基本類型轉為字符串
(1)String類的valueOf()
(2)基本類型和""進行連接運算
6)包裝類的比較
(1)包裝類可以與基本數據類型比較
(2)因為包裝類是引用數據類型,所以只有兩個包裝類指向用一個對象的時候才會返回true
7)包裝類比較的特殊情況
自動裝箱的結果
分析:以上程序,當兩個2自動裝箱后,比較相等,但是兩個128自動裝箱后就不相等。
這是因為系統內部提供了一個緩存功能,把-128~127之間的整數自動裝箱成一個Integer時,實際上直接指向對象的數值元素,而-128~127范圍外的整數自動裝箱成Integer時,總是新創建一個Integer實例。
2.toString()方法
toString()是Object類里面的一個實例方法,因為所有的類都是Object的子類,所以所有的Java對象都具有toString()方法。
當打印一個對象的時候,總是會調用toString()方法。在缺省狀態下,其輸出時類名、符號名@、對象的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.單例類
有時候,不允許自由創建一個類的實例,而只允許該類創建一個對象,這就是單例類。
1)創建單例類的方法
(1)要把構造器使用private修飾,這樣就能避免其他類自由創建該類的實例。
(2)提供一個public方法作為該類的訪問點,用于創建對象,且該方法應該使用static修飾。(因為調用該方法時候,對象還不存在,所以調用該方法的只能是類)
(3)該類中還要有一個緩存對象,用于判斷該類是否已經創建過對象了,這樣才能保證只創建一個對象,該成員應該也要static修飾。
4.比較(==和equals方法)
1)若使用==對兩個引用類型變量進行比較,他們必須指向同一個對象時,==判斷才會是true。
2)當比較兩個變量時基本類型時,且都是數值類型時,兩個值相等,就會返回true
例如:
3)"hello"直接量和new String("hello")的區別?
(1)常量池的概念:專門用于管理在編譯期被確定并被保存在已編譯的.class文件中的一些數據。
(2)當Java程序直接使用形如"hello"的字符串直接了(包括可以在編譯時就計算出來的字符串值)時,JVM將會使用常量池來管理這些字符串。
(3)當使用new String("hello")時,JVM會先使用常量池來管理"hello"直接量,再調用String類的構造器來創建一個新的String對象,新創建的String對象被保存在堆內存中。也就是new String("hello")一共產生了兩個對象。
JVM常量池保證相同的字符串直接量只有一個,不會產生多個副本。
4)equals方法
(1)equals方法是Object類提供的一個實例方法,因此所有引用變量都能調用該方法,但是該方法判斷該兩個對象相等的標準與使用==運算符沒有區別,同樣是兩個引用變量指向同一個對象時才會返回true。
(2)String已經重寫了Object的equals()方法,String的equals()方法判斷兩個字符串是否相等的標準是:只要兩個字符串的字符序列相同,就返回true。
(3)Object默認提供的equals()只是比較對象的地址,多數情況下,我們需要重寫equals()方法。
?
轉載于:https://www.cnblogs.com/EvanLiu/archive/2013/06/12/3132648.html
總結
以上是生活随笔為你收集整理的Java笔记:包装类、toString()方法、单例类、比较(==和equals方法)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: r语言 小树转化百分数_“小树”机器人1
- 下一篇: 探究Java如何实现原子操作(atomi