一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - java 中String.equals和==的比較

java 中String.equals和==的比較

2020-12-18 13:08大舒 Java教程

這篇文章主要介紹了java 中String.equals和==的比較的相關資料,需要的朋友可以參考下

 java 中String.equals==的比較

 初學java有段時間了,但是昨晚忽然就被"asd"==getpara("password")搞得不開心了:確實JAVA很多東西和以前接觸過的語言完全不一樣,比如最簡單的new String("asd") !=new String ("asd")。

1 一個最簡單的程序:

?
1
2
3
4
5
6
7
public class A {
  public static void main(String args[]) {
    String s1 = "Hello";
    String s2 = "Hello";
    System.out.println(s1 == s2);
  }
}

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

2 第一種變體:

?
1
2
3
4
5
6
7
8
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));
  }
}

或者:

?
1
2
3
4
5
6
7
8
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));
  }
}

那么結果就有點不太確定了,有些人很壞的想到了,單獨拿出來,肯定至少有一個不會相等。

這兩個程序的結果都是false true,原因很簡單,JAVA是一個基本完全面向對象的語言,s1 == s2 判斷的是他的引用(相當于內存地址、指針),equals則是使用這個對象自身的方法去判斷值是否相等。

在以下表達式中:

?
1
2
String s1 = "Hello";
String s2 = new String("Hello");

JVM得到的是兩個不同的信息:

1.我要創建一個“Hello”字符串。
2.我要創建一個新的“Hello”字符串,不要跟原來的一樣的。

于是,s1 != s2.

3 第二種變體:

順序排列:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
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));
  }
}

打亂順序排列:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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));
  }
}

那么這次應該很清楚了=

兩個object,但是中間加入了一些羞羞的東西,于是答案肯定是true true true true。

那么intern到底是什么。

4 intern作用:

當調用 intern 方法時,如果池已經包含一個等于此 String 對象的字符串(該對象由 equals(Object) 方法確定),則返回池中的字符串。

否則,將此 String 對象添加到池中,并且返回此 String 對象的引用。

intern的適用情況:多個相同的大字符串同時出現的情況,例如可能出現多個相同消息的消息隊列的設計。

以上就是java 中String.equals和==的比較的實例詳解,如有疑問請留言或者到本站社區交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

原文鏈接:https://segmentfault.com/a/1190000002645999

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日本大片免aaa费观看视频 | 性xxx免费视频| 俄罗斯美女大逼 | 激情影院免费观看 | 国产久草在线 | 成人快插| 成年人黄视频在线观看 | 好女孩韩剧免费观看 | 免费国产网站 | 国产精品欧美亚洲韩国日本 | 成人网视频免费播放 | 亚洲精品视频网 | 秋霞理论在一l级毛片 | 欧美肥胖bb| 欧美久久天天综合香蕉伊 | 日韩欧美中文在线 | 变态 另类 人妖小说 | 亚洲天堂影院 | 亚洲情欲网 | 99久女女精品视频在线观看 | 91九色麻豆 | 麻豆找网服 | 欧美人交性视频在线香蕉 | 国产视频一区 | 国产精品福利在线观看秒播 | 男女性gif抽搐出入视频 | 成人一区二区丝袜美腿 | 日韩资源在线 | 爱情岛论坛亚洲一号路线 | 免费港剧在线观看港剧 | 操到翻白眼 | boobsmilking流奶水 | 亚洲六月丁香六月婷婷色伊人 | tube69xxxxhd日本 | 女子监狱第二季未删减在线看 | 美女乳液 | 亚洲国产成人精品无码区5566 | 97热久久免费频精品99国产成人 | 免费刷10000名片赞网站 | 91免费在线播放 | 国产精品午夜性视频网站 |