String str = "123"是在方法区的字符串常量池里创建了一个"123"的对象,并把值赋给了str;而String str1 = new String("123")是在堆区创建了一个String的实例,这个实例的内容是指向字符串常量池重的“123”,同时把堆区重的地址值传给了str1。所有,System.out.println(str==str1),为false,比较的是两个字符串的地址值,一个在常量池一个在堆区,肯定不相同;System.out.println(str.equal(str1)),为true,比较的是值因为都是指向常量池中的“123”,所以为true |