一個關於string的區別
阿新 • • 發佈:2017-09-28
字符 println 機制 equal nbsp print 對象 demo string
1 public class Test01 { 2 public static void main(String[] args) { 3 //demo1(); 4 //demo2(); 5 //demo3(); 6 //demo4(); 7 demo5(); 8 } 9 private static void demo5() { 10 String s1 = "ab"; 11 String s2 = "abc";12 String s3 = s1 + "c"; 13 System.out.println(s3 == s2); 14 System.out.println(s3.equals(s2)); //true 15 } 16 private static void demo4() { 17 //byte b = 3 + 4; //在編譯時就變成7,把7賦值給b,常量優化機制 18 String s1 = "a" + "b" + "c";//java中有常量優化機制,在編譯時期就能確定s2的值為"abc",所以編譯時期,在常量池中創建"abc" 19 String s2 = "abc";//執行到這裏時常量池中已經有了"abc",所以就不再創建,所以s1和s2指向的是常量池中同一個字符串常量"abc" 20 System.out.println(s1 == s2); //true,java中有常量優化機制 21 System.out.println(s1.equals(s2)); //true 22 } 23 privatestatic void demo3() {//==比較的是地址值 24 String s1 = new String("abc"); //錄的是堆內存對象的地址值 25 String s2 = "abc"; //記錄的是常量池中的地址值 26 System.out.println(s1 == s2); //false 27 System.out.println(s1.equals(s2)); //true 28 } 29 private static void demo2() { 30 //創建幾個對象 31 //創建兩個對象,一個在常量池中,一個在堆內存中 32 String s1 = new String("abc"); 33 System.out.println(s1); 34 } 35 private static void demo1() { //常量池中沒有這個字符串對象,就創建一個,如果有直接用即可 36 String s1 = "abc"; 37 String s2 = "abc"; 38 System.out.println(s1 == s2); //==號比較的是地址值,true 39 System.out.println(s1.equals(s2)); //比較的是字符串的內容:true 40 } 41 } 42
一個關於string的區別