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
时间: 2024-10-09 08:14:47