51,410
社区成员
发帖
与我相关
我的任务
分享
这和 API 完全没关系,是编译器的问题。完全同样的 API, 你也可能遇到一个特殊的编译器,编译得结果会造成
str1!=str2.
但是大多数编译器的结果,都将是 str1==str2, true!.
这是编译器,优化不同地方引用的常数 "abc"的存储,共用一个"abc"存储的结果。
但是,编译器是否优化常数存储,怎样优化,不是 Java 标准所关心的问题,所以Java 标准 也不保证
str1 和 str2 参照的是否是同一地址,也就是不保证 "str1==str2 必须是 true".
最后,关于 str1.equals(str2):
这是 J2SE API 定义的 String class 里 equals 函数的行为:对 String 的值中的 characters 进行 逐个比较。具体的,API 有叙述。