日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

JavaSE(六)包装类、基本类型和字符串之间的转换、==和equals的区别

發(fā)布時(shí)間:2025/3/18 java 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaSE(六)包装类、基本类型和字符串之间的转换、==和equals的区别 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、包裝類

Java語言是一個(gè)面向?qū)ο蟮恼Z言,但是Java中的基本數(shù)據(jù)類型卻是不面向?qū)ο蟮?#xff0c;這在實(shí)際使用時(shí)存在很多的不便,為了解決這個(gè)不足,

在設(shè)計(jì)類時(shí)為每個(gè)基本數(shù)據(jù)類型設(shè)計(jì)了一個(gè)對(duì)應(yīng)的類進(jìn)行代表,這樣八個(gè)和基本數(shù)據(jù)類型對(duì)應(yīng)的類統(tǒng)稱為包裝類(Wrapper Class),有些地方也翻譯為外覆類或數(shù)據(jù)類型類。

  1.1、包裝類均位于Java.lang包,包裝類和基本數(shù)據(jù)類型的對(duì)應(yīng)關(guān)系如下表所示:

  Primitive-Type??   Wrapper-Class
?? ??? ?byte?? ??? ???       ?Byte
?? ??? ?short?? ??? ???       Short
?? ??? ?int?? ??? ??? ???       Integer
?? ??? ?long?? ??? ??? ?      Long
?? ??? ?float?? ??? ??? ?      Float
?? ??? ?double?? ??? ??? ?    ?? Double
?? ??? ?boolean?? ??? ??? ?     Boolean
?? ??? ?char?? ??? ??? ?????????????????? ? Character

  注意:在這八個(gè)類名中,除了Integer和Character類以后,其它六個(gè)類的類名和基本數(shù)據(jù)類型一致,只是類名的第一個(gè)字母大寫即可

  1.2、包裝類的位置

  包裝類型都是java.lang下的類,所以在使用的時(shí)候不需要導(dǎo)入包。

  1.3、每種包裝類中都定義屬性和方法供其對(duì)象使用

    這是從基本類型變?yōu)榘b類型最明顯的區(qū)別,現(xiàn)在指向的是對(duì)象了,可以訪問對(duì)象中的屬性和調(diào)用對(duì)象中的方法了,之前只是一個(gè)簡(jiǎn)單的數(shù)值,沒有任何屬性和方法。
?? ??? ?例如:
?? ??? ??? ?//使用變量i不能訪問任何屬性和訪問
?? ??? ??? ?//因?yàn)樽兞縤沒有指向?qū)ο?也不能指向?qū)ο?br />?? ??? ??? ?int i = 1;
?? ??? ??? ?
?? ??? ??? ?//查看API可知Integer類中的構(gòu)造器如果使用
?? ??? ??? ?//使用變量i可以訪問Integer類中定義的屬性和方法
?? ??? ??? ?//因?yàn)樽兞縤指向的是對(duì)象,這是一個(gè)引用類型的變量
?? ??? ??? ?Integer i = new Integer(1);
?? ??? ??? ?或者
?? ??? ??? ?Integer i = new Integer("1");

?? ??? ??? ?注:包裝類中的屬性和方法大都是靜態(tài)的,可以使用類名直接訪問。(也有非靜態(tài)的方法,就需要使用對(duì)象調(diào)用了)
?? ??? ?
?? ??? ?例如:
?? ??? ??? ?main:
?? ??? ??? ??? ?System.out.println(Integer.MAX_VALUE);
?? ??? ??? ??? ?System.out.println(Integer.MIN_VALUE);
?? ??? ??? ??? ?System.out.println(Integer.toBinaryString(100));

  1.4、常用的方法

    

    簡(jiǎn)單的使用:

        

  1.5、包裝類的作用

    1)作為和基本數(shù)據(jù)類型對(duì)應(yīng)的類類型存在,方便涉及到對(duì)象的操作。

?????????????? 2)包含每種基本數(shù)據(jù)類型的相關(guān)屬性如最大值、最小值等,以及相關(guān)的操作方法。

  1.6、JDK1.5增加了自動(dòng)拆箱裝箱的功能(低版本JDK中編譯報(bào)錯(cuò))

    注:針對(duì)八種基本類型及其包裝類型,這里以int和Integer為例

?? ???   ?//自動(dòng)裝箱,把字面值1包裝成Integer類型對(duì)象
?? ??? ?  Integer i1 = 1;
?? ??? ?
?? ???   ?//自動(dòng)拆箱,把Integer對(duì)象轉(zhuǎn)變?yōu)橐粋€(gè)簡(jiǎn)單的int類型值
?? ???   ?int i2 = new Integer(1);

?? ??  ? ?注:
?? ??? ??  ? ?//編譯通過
?? ??? ??  ? ?Integer a = 1;

?? ??? ??  ? ?//編譯報(bào)錯(cuò)
?? ???   ??? ?//1可以自動(dòng)裝箱為Integer類型對(duì)象
?? ??? ??  ? ?//但是Integer和Long沒有任何關(guān)系
?? ??? ???   ?Long b = 1;
?? ??? ??? ?
?? ??? ???   ?//因?yàn)閕nt是32位 long是64位
?? ??? ??  ? ?int --可以自動(dòng)轉(zhuǎn)換為--> long
?? ??? ??? ?
?? ??? ???   ?//因?yàn)镮nteger和Long沒有子父類關(guān)系
?? ??? ??  ? ?Integer --不能轉(zhuǎn)換為--> Long

二、基本類型和字符串之間的轉(zhuǎn)換  

  在程序開發(fā)中,我們經(jīng)常需要在基本數(shù)據(jù)類型和字符串之間進(jìn)行轉(zhuǎn)換。

  2.1、基本類型轉(zhuǎn)換為字符串有三種方法:

    1) 使用包裝類的 toString() 方法

    2) 使用String類的 valueOf() 方法

    3.)用一個(gè)空字符串加上基本類型,得到的就是基本類型數(shù)據(jù)對(duì)應(yīng)的字符串

  

  

  2.2、將字符串轉(zhuǎn)換成基本類型有兩種方法:

    1) 調(diào)用包裝類的 parseXxx 靜態(tài)方法

    2.)調(diào)用包裝類的 valueOf() 方法轉(zhuǎn)換為基本類型的包裝類,會(huì)自動(dòng)拆箱

    

三、==和equals方法的區(qū)別

?  這倆個(gè)都是對(duì)倆個(gè)變量做比較的。
??   ?1)基本類型變量的比較
?? ???   ?基本類型變量指向的不是對(duì)象,不能調(diào)用方法,所以只能使用==進(jìn)行比較,并且比較的是基本類型變量的簡(jiǎn)單數(shù)值是否相等。
?? ?
??   ?2)引用類型變量的比較
?? ???   ?引用類型變量指向的是對(duì)象,所以既可以使用==進(jìn)行比較,也可以使用equals進(jìn)行比較

?? ???   區(qū)別在于:
?? ??? ??? ?  equals是Object中的方法,每個(gè)對(duì)象都可以調(diào)用和其他對(duì)象比較是否相等,默認(rèn)比較的是倆個(gè)引用所指向的對(duì)象內(nèi)存地址值(和==號(hào)的作用一樣),但是也可以在類中對(duì)equals方法進(jìn)行重寫,按照自己的邏輯來比較倆個(gè)對(duì)象。

?? ??? ???   ==是java中的基本的操作符,是不能重寫的,倆個(gè)引用使用==進(jìn)行比較,那么比較的是引用所指向的內(nèi)存地址值是否相同。

四、toString方法hashCode方法 

toString和hashCode都是Object類中的方法,所以每個(gè)對(duì)象都可以直接調(diào)用。
?? ?
?? ?hashCode方法,返回該對(duì)象的哈希碼值,Object中的實(shí)現(xiàn)一般是通過將該對(duì)象的內(nèi)存地址轉(zhuǎn)換成一個(gè)整數(shù)。

?? ?toString方法,返回該對(duì)象的字符串表示。
?? ??? ?其形式為:
?? ??? ??? ?類的全限定名@hashCode方法返回值的十六進(jìn)制形式
?? ??? ??? ?即:
?? ??? ??? ?o.getClass().getName() + "@" + Integer.toHexString(o.hashCode())

?? ?
?? ?例如:
?? ??? ?public class Student{
?? ??? ?
?? ??? ?}
?? ??? ?main:
?? ??? ??? ?Student s = new Student();
?? ??? ??? ?String str1 = s.toString();
?? ??? ??? ?String str2 = s.getClass().getName()+"@"+Integer.toHexString(s.hashCode());
?? ??? ??? ?System.out.println(str1);
?? ??? ??? ?System.out.println(str2);
?? ??? ?
?? ??? ?輸出結(jié)果:
?? ??? ??? ?com.briup.ch06.Student@6084fa6a
?? ??? ??? ?com.briup.ch06.Student@6084fa6a

?? ?
?? ?注:我們可以把最后的那個(gè)六十進(jìn)制數(shù)字認(rèn)為是這個(gè)對(duì)象的內(nèi)存地址,但是其實(shí)并不是真的地址值,而是這個(gè)對(duì)象的哈希碼值,這個(gè)哈希碼值默認(rèn)又是通過對(duì)象地址值轉(zhuǎn)換過來的一個(gè)數(shù)字。(如果我們重寫了hashCode方法,那這個(gè)返回的哈希碼值就真的和對(duì)象內(nèi)存地址沒有一點(diǎn)關(guān)系了)

?? ?
?? ?例如:
?? ??? ?Student s = new Student();
?? ??? ?//打印引用時(shí),默認(rèn)調(diào)用其所指向?qū)ο蟮膖oString方法
?? ??? ?System.out.println(s);
?? ??? ?System.out.println(s.toString());
?? ?
?? ??? ?注:有些時(shí)候還是會(huì)有一點(diǎn)區(qū)別
?? ??? ?Student s = null;
?? ??? ?//打印null
?? ??? ?System.out.println(s);
?? ??? ?//運(yùn)行報(bào)錯(cuò),空指針異常
?? ??? ?System.out.println(s.toString());

 

?

?

?

?


?? ??? ?  ???

?

總結(jié)

以上是生活随笔為你收集整理的JavaSE(六)包装类、基本类型和字符串之间的转换、==和equals的区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。