【发布时间】:2013-04-04 05:23:07
【问题描述】:
前几天我反编译了一些Java代码,发现了这个:
String s1 = "something";
String s2 = "something_else";
if (s1 == s2) {
// Path 1
} else {
// Path 2
}
显然使用 '==' 来测试字符串是否相等是不好的
但我想知道 - 此代码已被编译和反编译。 如果所有字符串在编译时都已定义并已实习并且代码已编译 - s1.equals(s2) 是否有可能优化为 's1 == s2'?
【问题讨论】:
-
一种方法是像这样编译代码,然后查看反编译器返回的内容:)
-
它是从什么编译代码反编译而来的?
-
假设您使用的编译器版本与他们用于创建原始类文件的编译器版本相同。
-
这看起来像是程序员会(正确或错误地)执行的“优化”,而不是编译器会执行的。
-
您为什么要这样做? String#equals 已经在使用
==作为第一个测试。
标签: java string optimization equality string-interning