package testwebapp;
public class Test {
//大家思考一下输出结果是什么?
public static void main(String[] args) {
String s1 = "abc";
String s2 = "abc";
String s3 = new String("abc");
System.out.println(s1 == s2);
System.out.println(s1 == s3);
}
public class Test {
//大家思考一下输出结果是什么?
public static void main(String[] args) {
String s1 = "abc";
String s2 = "abc";
String s3 = new String("abc");
System.out.println(s1 == s2);
System.out.println(s1 == s3);
}
}
首先要知道==的语法。s1、s2、s3是三个不同的对象,大家可能会认为输出都是:false。但运行结果为:true、false。基本类型的变量和对象的引用变量是在函数的栈内存中分配,而堆内存中则存放的是new 出来的对象和数组。在Java虚拟机中还有一块区域叫做常量池。String s1 = "abc"; 的值是存储在常量池中的,当创建引用String s2 = "abc" 的时候,Java虚拟机会优先在常量池中查找是否存在"abc",如果存在则让s2指向这个值,不会重新创建;如果常量池中没有,则创建并添加到常量池中。
所以答案是true 和false。