java string ==和equals的使用


 

 1 package com.example.base.string;
 2 
 3 public class MyStringTest {
 4 
 5     public static void main(String args[]) {
 6         testString();
 7     }
 8     
 9     private static void testString() {
10         String hello = "Hello";
11         String hello2 = new String("Hello");
12         String lo = "lo";
13         //false. ==比較的是引用.hello是一個字符串常量表達式,並實現為調用interned,以共享不同的示例(string pool)
14         //hello2是一個對象,指向的是堆上的一個地址
15         System.out.println(hello == hello2);            //false
16         //true. equals比較的是兩個對象的值
17         System.out.println(hello.equals(hello2));       //true
18         //true. intern()會檢查當前字符串池是否包含這個字符串。包含則返回池中的字符串,否則將字符串對象添加到池中,並返回該字符串對象的引用
19         //(最終結果就是返回一個指向常量池字符串的引用)
20         System.out.println(hello == hello2.intern());   //true
21         //true. 兩個都是常量表達式(編譯時確定的),都是指向字符串池的引用
22         System.out.println(hello == "Hello");           //true
23         //true. 不同類下的兩個常量表達式,依然是指向同一個字符串池的引用
24         System.out.println(Other.hello == hello);       //true
25         //true. 不同包下的兩個常量表達式,依然是指向同一個字符串池的引用
26         //System.out.println(com.example.base.string.other.Other.hello == hello);     //true
27         //true. 兩個都是常量表達式,都是指向字符串池的引用
28         System.out.println(hello == ("Hel" + "lo"));    //true
29         //false.  后者不是常量表達式,是運行時通過串聯計算的字符串(lo是一個對象,不是常亮"xxx"),會新建對象
30         System.out.println(hello == ("Hel" + lo));      //false
31         //true. 將新對象intern()會返回指向字符串池的引用
32         System.out.println(hello == ("Hel" + lo).intern());     //true
33     }
34 }
35 class Other {
36     static String hello = "Hello";
37 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM