溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Java中?關(guān)系操作符“==”指的什么意思

發(fā)布時(shí)間:2020-11-05 11:47:56 來(lái)源:億速云 閱讀:232 作者:小新 欄目:編程語(yǔ)言

小編給大家分享一下Java中關(guān)系操作符“==”指的什么意思,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!

關(guān)系操作符“==”到底比較的是什么?

下面這個(gè)句話(huà)是摘自《Java編程思想》一書(shū)中的原話(huà):"關(guān)系操作符生成的是一個(gè)boolean結(jié)果,它們計(jì)算的是操作數(shù)的值之間的關(guān)系”。

這句話(huà)看似簡(jiǎn)單,理解起來(lái)還是需要細(xì)細(xì)體會(huì)的。說(shuō)的簡(jiǎn)單點(diǎn),==就是用來(lái)比較值是否相等。

下面先看幾個(gè)例子:

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,這個(gè)很容易理解,變量n和變量m存儲(chǔ)的值都為3,肯定是相等的。而為什么str1和str2兩次比較的結(jié)果不同?要理解這個(gè)其實(shí)只需要理解基本數(shù)據(jù)類(lèi)型變量和非基本數(shù)據(jù)類(lèi)型變量的區(qū)別。

對(duì)于這8種基本數(shù)據(jù)類(lèi)型的變量,變量直接存儲(chǔ)的是“值”,因此在用關(guān)系操作符==來(lái)進(jìn)行比較時(shí),比較的就是 “值” 本身。要注意浮點(diǎn)型和整型都是有符號(hào)類(lèi)型的,而char是無(wú)符號(hào)類(lèi)型的(char類(lèi)型取值范圍為0~2^16-1).

也就是說(shuō)比如:

int n=3;
int m=3; 

變量n和變量m都是直接存儲(chǔ)的"3"這個(gè)數(shù)值,所以用==比較的時(shí)候結(jié)果是true。

而對(duì)于非基本數(shù)據(jù)類(lèi)型的變量,在一些書(shū)籍中稱(chēng)作為 引用類(lèi)型的變量。比如上面的str1就是引用類(lèi)型的變量,引用類(lèi)型的變量存儲(chǔ)的并不是 “值”本身,而是于其關(guān)聯(lián)的對(duì)象在內(nèi)存中的地址。

比如下面這行代碼:

String str1;

這句話(huà)聲明了一個(gè)引用類(lèi)型的變量,此時(shí)它并沒(méi)有和任何對(duì)象關(guān)聯(lián)。

而通過(guò)new String("hello")來(lái)產(chǎn)生一個(gè)對(duì)象(也稱(chēng)作為類(lèi)String的一個(gè)實(shí)例),并將這個(gè)對(duì)象和str1進(jìn)行綁定:

str1= new String("hello");

那么str1指向了一個(gè)對(duì)象(很多地方也把str1稱(chēng)作為對(duì)象的引用),此時(shí)變量str1中存儲(chǔ)的是它指向的對(duì)象在內(nèi)存中的存儲(chǔ)地址,并不是“值”本身,也就是說(shuō)并不是直接存儲(chǔ)的字符串"hello"。這里面的引用和C/C++中的指針很類(lèi)似。

因此在用==對(duì)str1和str2進(jìn)行第一次比較時(shí),得到的結(jié)果是false。因此它們分別指向的是不同的對(duì)象,也就是說(shuō)它們實(shí)際存儲(chǔ)的內(nèi)存地址不同。

而在第二次比較時(shí),都讓str1和str2指向了str指向的對(duì)象,那么得到的結(jié)果毫無(wú)疑問(wèn)是true。

看完了這篇文章,相信你對(duì)Java中關(guān)系操作符“==”指的什么意思有了一定的了解,想了解更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI