String a = "a1";
String a1 = "a"+1;
System.out.println(a==a1);
这段代码的结果是true, 原因是a对象在字符串常量池中创建了一个a1,而a1对象因为字符串a和1是常量,所以在编译时就已经确定了是a1。
String b = "b1";
int bb = 1;
String b1 = "b"+bb;
System.out.println(b==b1);
而这段代码的结果是false,解释说原因是b对象在字符串常量池中创建了一个b1,而b对象因为bb是个变量所以不能确定,是false。
小弟想问一下为啥说编译期确定了值才是true,在运行期确定的值是false,代码到最后编译完了不还是需要运行吗?难道==里面的值在编译的时候就确定了所以即使运行了代码那个值也不变??百度看了好多感觉都没说到这点,求大佬们指教!
String a1 = "a"+1;
System.out.println(a==a1);
这段代码的结果是true, 原因是a对象在字符串常量池中创建了一个a1,而a1对象因为字符串a和1是常量,所以在编译时就已经确定了是a1。
String b = "b1";
int bb = 1;
String b1 = "b"+bb;
System.out.println(b==b1);
而这段代码的结果是false,解释说原因是b对象在字符串常量池中创建了一个b1,而b对象因为bb是个变量所以不能确定,是false。
小弟想问一下为啥说编译期确定了值才是true,在运行期确定的值是false,代码到最后编译完了不还是需要运行吗?难道==里面的值在编译的时候就确定了所以即使运行了代码那个值也不变??百度看了好多感觉都没说到这点,求大佬们指教!
