Java中的==使用方法詳解
Java中的==符號是一個很令人費解的點,它究竟代表的是什么,下面由我來揭示一下它所包含的奧妙!
1.==在基本數(shù)據(jù)類型是比較值的大小
int a = 1; int b = 1; System.out.println(a==b);
上面的例子輸出的結(jié)果為
true
所以在基本數(shù)據(jù)類型比較的是數(shù)值是否相等
2.在包裝類中比較的是地址相等
2.1 Integer類類型==的運用
看下面的例子:
Integer a = new Integer(1); Integer b = new Integer(1); System.out.println(a==b);
上面代碼的答案是
false
通過關(guān)鍵字new出來的對象都是存在堆棧里面的,每new一次則在
在堆棧中創(chuàng)建一個對象。所以a與b的地址不一樣。
我們再看下面的例子
Integer a =1; Integer b = 1; Integer c =128; Integer d = 128; System.out.println(a==b); System.out.println(c==d);
上面例子答案是
true
false
為什么會出現(xiàn)這樣子呢,我們先看看jdk中的源碼吧
public static Integer valueOf(int i) { if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); }
上面的例子使用到了自動裝箱的功能, Integer a =1;
等同于
Integer a = Tnteger.valueOf(1)
。從jdk的源碼可以得知valueOf方法在代碼運行之前已經(jīng)把-128-127的Intege之間r的對象存在了緩存中了,在運行的時候如果Integer對象在-128-127之間則返回緩存中的該對象,而不會重新生成對象,如果不在-128-127之間則會在堆中新創(chuàng)建一個對象。
2.2 String類類==的運用
在兩個String用==來作比較的時候,比較的也是他的地址。
String a =new String( "abc"); String b =new String( "abc"); System.out.println(a==b);
上面的例子運行結(jié)果為
false
通過關(guān)鍵字new出來的對象都是存在堆棧里面的,每new一次則在
在堆棧中創(chuàng)建一個對象。所以a與b的地址不一樣。和上面Integer的new例子是一樣的。
我們再看下面的例子
String a ="abc"; String b ="abc"; System.out.println(a==b);
上面例子的結(jié)果是
true
String不通過new直接通過=的方式直接賦值,不是像new一個對象一樣直接在堆中賦值,是先遍歷常量池,看常量值有沒有直接賦值的對象,有的話直接返回該對象,如果沒有的話,則在常量池中新建一個String對象,返回新建的對象。因此在常量池中不會有相同的String對象。所以變量a與b指向的地址一樣所以返回true。
我們再看一個例子:
String a = "abc"; String b = "d"; String c ="abc"+"d"; String d = a+b; String e ="abcd"; System.out.println(c==e); System.out.println(d==e);
上面代碼的結(jié)果是
true
false
String c ="abc"+"d";
在編譯的時候已經(jīng)進行了優(yōu)化了,"abc"+"d"
編譯器把他看成了一個常量表達式,所以"abc"+"d"
相當于字符串常量abcd
。而String d = a+b;
存在變量不能進行優(yōu)化,是在運行的時候才進行操作的,他同時在堆中創(chuàng)建了一個新的字符串對象并指向d。
到此這篇關(guān)于Java中的==使用方法詳解的文章就介紹到這了,更多相關(guān)Java ==使用方法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
在Java中輕松將HTML格式文本轉(zhuǎn)換為純文本的方法示例(保留換行)
這篇文章主要介紹了在Java中輕松將HTML格式文本轉(zhuǎn)換為純文本的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-04-04Mybatis使用useGeneratedKeys獲取自增主鍵
這篇文章主要為大家介紹了Mybatis使用useGeneratedKeys獲取自增主鍵示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-01-01Java SpringMVC數(shù)據(jù)響應(yīng)超詳細講解
Spring?MVC?是?Spring?提供的一個基于?MVC?設(shè)計模式的輕量級?Web?開發(fā)框架,本質(zhì)上相當于?Servlet,Spring?MVC?角色劃分清晰,分工明細,本章來講解SpringMVC數(shù)據(jù)響應(yīng)2022-04-04使用Logback設(shè)置property參數(shù)方式
這篇文章主要介紹了使用Logback設(shè)置property參數(shù)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03