Eclipse在编译之前会比较静态值吗?

时间:2019-01-24 06:33:20

标签: java string

在此字符串蚀中,在“不匹配”上显示无效代码警告吗?

 String b = ("goodString")==("goodString") ? "Condition Macth": "Not Match";

即使在编译之前它也会检查字符串吗?

String a = ("goodString".equals("goodString")) ? "Condition Macth" : "Not Match";

如果我更改为.equals,则警告关闭。

2 个答案:

答案 0 :(得分:2)

Eclipse可能会分析您的代码以检测无效代码。

在这种特定情况下,它显示警告,因为由于 string interning 这些值始终具有相同的标识,因此条件始终为true。 Eclipse会检测到并发出警告。

如果您使用equals,则比较不再是常量表达式JLS § 15.28),并且不再保证会返回true。因此,警告消失了。


顺便说一句,您应该始终使用equals来比较字符串。

答案 1 :(得分:0)

String b = ("goodString")==("goodString") ? "Condition Macth": "Not Match";

在这里,Eclipse IDE足够聪明来查找无效的代码。如果发现“如果”条件始终为真,那么它将警告“其他”部分为无效代码,因为它将永远不会执行。在此代码段中,三元条件始终为真,因此显示死代码警告。