国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

[JAVA] String.equals和==的不同效果

vslam / 1342人閱讀

摘要:在以下表達(dá)式中得到的是兩個(gè)不同的信息我要?jiǎng)?chuàng)建一個(gè)字符串。否則,將此對(duì)象添加到池中,并且返回此對(duì)象的引用。的適用情況多個(gè)相同的大字符串同時(shí)出現(xiàn)的情況,例如可能出現(xiàn)多個(gè)相同消息的消息隊(duì)列的設(shè)計(jì)。

  

初學(xué)java有段時(shí)間了,但是昨晚忽然就被"asd"==getpara("password")搞得不開(kāi)心了:確實(shí)JAVA很多東西和以前接觸過(guò)的語(yǔ)言完全不一樣,比如最簡(jiǎn)單的new String("asd") !=new String ("asd")

1 一個(gè)最簡(jiǎn)單的程序:
public class A {
    public static void main(String args[]) {
        String s1 = "Hello";
        String s2 = "Hello";
        System.out.println(s1 == s2);
    }
}

肯定很多人說(shuō),輸出true,確實(shí)是輸出true,s1和s2引用的是同一個(gè)東西嘛。但是這個(gè)程序如果換一種寫法,那么肯定就不太一樣了。

2 第一種變體:
public class A {
    public static void main(String args[]) {
        String s1 = "Hello";
        String s2 = new String("Hello");
        System.out.println(s1 == s2);
        System.out.println(s1.equals(s2));
    }
}

或者:

public class A {
    public static void main(String args[]) {
        String s1 = new String("Hello");
        String s2 = new String("Hello");
        System.out.println(s1 == s2);
        System.out.println(s1.equals(s2));
    }
}

那么結(jié)果就有點(diǎn)不太確定了,有些人很壞的想到了,多帶帶拿出來(lái),肯定至少有一個(gè)不會(huì)相等。

這兩個(gè)程序的結(jié)果都是false true,原因很簡(jiǎn)單,JAVA是一個(gè)基本完全面向?qū)ο蟮恼Z(yǔ)言,s1 == s2 判斷的是他的引用(相當(dāng)于內(nèi)存地址、指針),equals則是使用這個(gè)對(duì)象自身的方法去判斷值是否相等。

在以下表達(dá)式中:

String s1 = "Hello";
String s2 = new String("Hello");

JVM得到的是兩個(gè)不同的信息:
1.我要?jiǎng)?chuàng)建一個(gè)“Hello”字符串。
2.我要?jiǎng)?chuàng)建一個(gè)新的“Hello”字符串,不要跟原來(lái)的一樣的。
于是,s1 != s2.

3 第二種變體:
順序排列:
public class A {
    public static void main(String args[]) {
        String s1 = new String("Hello");
        String s2 = new String("Hello");
        String s3 = "Hello";
        s1=s1.intern();
        s2=s2.intern();
        System.out.println(s1 == s2);
        System.out.println(s1.equals(s2));
        System.out.println(s3 == s2);
        System.out.println(s3.equals(s2));
    }
}
打亂順序排列:
public class A {
    public static void main(String args[]) {
        String s1 = new String("Hello");
        String s3 = "Hello";
        s1=s1.intern();
        String s2 = new String("Hello");
        s2=s2.intern();
        //也可以String s2 = new String("Hello").intern();
        System.out.println(s1 == s2);
        System.out.println(s1.equals(s2));
        System.out.println(s3 == s2);
        System.out.println(s3.equals(s2));
    }
}

那么這次應(yīng)該很清楚了=
兩個(gè)object,但是中間加入了一些羞羞的東西,于是答案肯定是true true true true
那么intern到底是什么。

4 intern作用:

當(dāng)調(diào)用 intern 方法時(shí),如果池已經(jīng)包含一個(gè)等于此 String 對(duì)象的字符串(該對(duì)象由 equals(Object) 方法確定),則返回池中的字符串。
否則,將此 String 對(duì)象添加到池中,并且返回此 String 對(duì)象的引用。

intern的適用情況:多個(gè)相同的大字符串同時(shí)出現(xiàn)的情況,例如可能出現(xiàn)多個(gè)相同消息的消息隊(duì)列的設(shè)計(jì)。

  

結(jié)論:該學(xué)JVM虛擬機(jī)了,Scala Up!

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/64298.html

相關(guān)文章

  • Java String類筆記

    摘要:這兩個(gè)操作符都是編譯器默認(rèn)引入了類,最后都調(diào)用方法返回對(duì)象,臨時(shí)對(duì)象被回收,因此效率極為低下 Java String類筆記 聲明 文章均為本人技術(shù)筆記,轉(zhuǎn)載請(qǐng)注明出處https://segmentfault.com/u/yzwall String的不可變性 String的不可變性 // String declaration public final class String ...

    Vicky 評(píng)論0 收藏0
  • replace java.lang.String.equals by Xbootclasspath

    摘要: env: os:ubuntu 16.04 x64openjdk8u //java.lang.String package java.lang; import java.lang.StringDebugHelper; //... public final class String{ final char value[];//remove private public bool...

    jzman 評(píng)論0 收藏0
  • Java語(yǔ)法糖編譯結(jié)果分析(二)

    摘要:因此,對(duì)應(yīng)地我們可以翻譯這段二進(jìn)制字節(jié)碼為這樣的代碼注意,這段代碼并不能通過(guò)編譯,因?yàn)樵创a這一層是不允許直接繼承的,這個(gè)繼承過(guò)程只允許在編譯器內(nèi)部解語(yǔ)法糖的過(guò)程中被編譯器添加,添加之后的類才會(huì)有的訪問(wèn)標(biāo)識(shí)符。 語(yǔ)法糖(Syntactic Sugar)的出現(xiàn)是為了降低我們編寫某些代碼時(shí)陷入的重復(fù)或繁瑣,這使得我們使用語(yǔ)法糖后可以寫出簡(jiǎn)明而優(yōu)雅的代碼。在Java中不加工的語(yǔ)法糖代碼運(yùn)行時(shí)可...

    LeviDing 評(píng)論0 收藏0
  • 手寫Spring之DI依賴注入

    摘要:如感興趣,可移步手寫之基于動(dòng)態(tài)創(chuàng)建對(duì)象手寫之基于注解動(dòng)態(tài)創(chuàng)建對(duì)象今天將詳細(xì)介紹如何手寫依賴注入,在運(yùn)行過(guò)程中如何動(dòng)態(tài)地為對(duì)象的屬性賦值。完成后在中會(huì)有相關(guān)的包出現(xiàn)進(jìn)行注入前需要?jiǎng)?chuàng)建工廠,在運(yùn)行時(shí)從工廠中取出對(duì)象為屬性賦值。 前兩篇文章介紹了關(guān)于手寫Spring IOC控制反轉(zhuǎn),由Spring工廠在運(yùn)行過(guò)程中動(dòng)態(tài)地創(chuàng)建對(duì)象的兩種方式。如感興趣,可移步: 手寫Spring之IOC基于xml...

    Cruise_Chan 評(píng)論0 收藏0
  • 手寫Spring之IOC基于注解動(dòng)態(tài)創(chuàng)建對(duì)象

    摘要:上一篇博客介紹了如何基于配置文件在運(yùn)行時(shí)創(chuàng)建實(shí)例對(duì)象,這篇博客將介紹基于注解方式怎樣實(shí)現(xiàn)對(duì)象的創(chuàng)建。方便測(cè)試,該類型分別創(chuàng)建兩個(gè)單例和多例的類型。注意這種為對(duì)象注入屬性值的方式耦合度較高,可根據(jù)情況使用。 上一篇博客介紹了如何基于xml配置文件在運(yùn)行時(shí)創(chuàng)建實(shí)例對(duì)象,這篇博客將介紹基于注解方式怎樣實(shí)現(xiàn)對(duì)象的創(chuàng)建。 廢話不多說(shuō),直接上代碼。 首先還是創(chuàng)建項(xiàng)目,由于這次不需要使用第三方的AP...

    Andrman 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<