1. 程式人生 > >一個關於string的區別

一個關於string的區別

字符 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 private
static 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的區別