java关于String问题
答案:2 悬赏:0 手机版
解决时间 2021-04-02 20:44
- 提问者网友:喧嚣尘世
- 2021-04-02 09:01
java关于String问题
最佳答案
- 五星知识达人网友:拾荒鲤
- 2021-04-02 10:10
final String s1 = "a";
String s2 = s1 + "b";
String s3 = "a" + "b";
System.out.println(s2 == "ab");
System.out.println(s3 == "ab");稍微一改两个都是true,这是什么原因,这是编译器优化的原因。
在编译期能确定的值,会被编译器优化,例如两个确定的字符串相加。
String s1 = "a"+"b";
编译器会优化成 String s1 = "ab";
追问我想问的是s2不也是“ab”吗
为什么是false追答你不知道字符串常量池吗?
String s1 = "ab";
String s2 = new String("ab");
System.out.println(s1 == s2);//false
System.out.println(s1.equals(s2));//true
==比较是否为同一个对象。
equals比较对象是否相等。追问为什么加上final 就是true呢?追答加上final说明s1不能再变化了,那么编译器会把s1优化成"a"。追问提交追问非常感谢
追答不客气
String s2 = s1 + "b";
String s3 = "a" + "b";
System.out.println(s2 == "ab");
System.out.println(s3 == "ab");稍微一改两个都是true,这是什么原因,这是编译器优化的原因。
在编译期能确定的值,会被编译器优化,例如两个确定的字符串相加。
String s1 = "a"+"b";
编译器会优化成 String s1 = "ab";
追问我想问的是s2不也是“ab”吗
为什么是false追答你不知道字符串常量池吗?
String s1 = "ab";
String s2 = new String("ab");
System.out.println(s1 == s2);//false
System.out.println(s1.equals(s2));//true
==比较是否为同一个对象。
equals比较对象是否相等。追问为什么加上final 就是true呢?追答加上final说明s1不能再变化了,那么编译器会把s1优化成"a"。追问提交追问非常感谢
追答不客气
全部回答
- 1楼网友:掌灯师
- 2021-04-02 11:02
第一句打印false是因为s1为引用类型的值 需要在运行时才能确定具体的值是多少
第二句打印true是因为“a”和“b”都是确定值的常量,在编译阶段会进行优化 也就是说在编译期就已经确定了s3的值为“ab”了
等与不等就是看能不能在编译器就确定各个变量的值
第二句打印true是因为“a”和“b”都是确定值的常量,在编译阶段会进行优化 也就是说在编译期就已经确定了s3的值为“ab”了
等与不等就是看能不能在编译器就确定各个变量的值
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯