小編給大家分享一下Java中關(guān)系操作符“==”指的什么意思,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!
創(chuàng)新互聯(lián)建站主要從事成都網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)扎囊,10多年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18980820575
關(guān)系操作符“==”到底比較的是什么?
下面這個句話是摘自《Java編程思想》一書中的原話:"關(guān)系操作符生成的是一個boolean結(jié)果,它們計算的是操作數(shù)的值之間的關(guān)系”。
這句話看似簡單,理解起來還是需要細細體會的。說的簡單點,==就是用來比較值是否相等。
下面先看幾個例子:
public class Main { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub int n=3; int m=3; System.out.println(n==m); String str = new String("hello"); String str1 = new String("hello"); String str2 = new String("hello"); System.out.println(str1==str2); str1 = str; str2 = str; System.out.println(str1==str2); } }
輸出結(jié)果為:
true false true
n==m結(jié)果為true,這個很容易理解,變量n和變量m存儲的值都為3,肯定是相等的。而為什么str1和str2兩次比較的結(jié)果不同?要理解這個其實只需要理解基本數(shù)據(jù)類型變量和非基本數(shù)據(jù)類型變量的區(qū)別。
對于這8種基本數(shù)據(jù)類型的變量,變量直接存儲的是“值”,因此在用關(guān)系操作符==來進行比較時,比較的就是 “值” 本身。要注意浮點型和整型都是有符號類型的,而char是無符號類型的(char類型取值范圍為0~2^16-1).
也就是說比如:
int n=3; int m=3;
變量n和變量m都是直接存儲的"3"這個數(shù)值,所以用==比較的時候結(jié)果是true。
而對于非基本數(shù)據(jù)類型的變量,在一些書籍中稱作為 引用類型的變量。比如上面的str1就是引用類型的變量,引用類型的變量存儲的并不是 “值”本身,而是于其關(guān)聯(lián)的對象在內(nèi)存中的地址。
比如下面這行代碼:
String str1;
這句話聲明了一個引用類型的變量,此時它并沒有和任何對象關(guān)聯(lián)。
而通過new String("hello")來產(chǎn)生一個對象(也稱作為類String的一個實例),并將這個對象和str1進行綁定:
str1= new String("hello");
那么str1指向了一個對象(很多地方也把str1稱作為對象的引用),此時變量str1中存儲的是它指向的對象在內(nèi)存中的存儲地址,并不是“值”本身,也就是說并不是直接存儲的字符串"hello"。這里面的引用和C/C++中的指針很類似。
因此在用==對str1和str2進行第一次比較時,得到的結(jié)果是false。因此它們分別指向的是不同的對象,也就是說它們實際存儲的內(nèi)存地址不同。
而在第二次比較時,都讓str1和str2指向了str指向的對象,那么得到的結(jié)果毫無疑問是true。
看完了這篇文章,相信你對Java中關(guān)系操作符“==”指的什么意思有了一定的了解,想了解更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!