为什么结果一个是true,一个是false?
2个回答
展开全部
java的==运算符是对引用进行比较(也就是比较地址),因此对字符串使用==运算符只是比较字符串的地址,而不是比较字符串内容。
a == c //结果为true的原因
java编译器进行了优化。
String c = b + 2;
由于c是一个常量字符串,编译器在编译时会直接计算出b + 2,将b + 2替换为"hello2",此时c就会被赋值为"hello2"
String c = "hello2";
又因为代码里有两个"hello2"字符串,字符串内容相同,编译器会优化成:
String a = "hello2";
// ...
String c = a;
此时a和c引用的是同一个字符串的地址,因此a==c结果为true。
a == e //结果为false的原因
变量d不是常量字符串,编译器不会优化变量e的初始值。即使a和e的字符串内容相同,他们引用的字符串地址不一样,因此a==e结果为false
追问
也就是说编译器会自动用a去替代b+2然后给到c?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询