在 Java 中比较声明为 Final 的 == 字符串
在 Java 中使用相等运算符 (==) 比较字符串时,结果根据字符串是否声明为最终字符串而有所不同。
Final字符串
当字符串被声明为final时,编译器通过将值内联为编译时常量表达式来优化它。这意味着字符串值在编译时确定并直接存储在字节码中,而不是在运行时动态分配。
Final Strings 的行为
中如果字符串声明为 Final,则比较表达式 concat == "string" 返回 true,因为:
非最终字符串
相反,非-final 字符串不是内联的,而是在运行时动态分配的。连接操作创建一个新的 String 对象,它与内存中的文字“字符串”不同。因此,比较表达式 concat == "string" 返回 false。
验证
要确认此行为,可以比较非最终和最终的字节码字符串版本:
非最终版版本:
// stores str and ing in separate variables and uses StringBuilder for concatenation
最终版本:
// directly inlines the final variable to create String string at compile time
因此,将字符串声明为 Final 并使用编译时常量表达式初始化它们会影响由于字符串文字的内联和驻留,使用 == 进行相等比较的结果。
以上是在 Java 中将字符串声明为'final”会影响'==”比较吗?的详细内容。更多信息请关注PHP中文网其他相关文章!