public class NoNameInnerClassDemo {
public static void main(String[] args) {
String s1 = "ab" + "c";
String s2 = "abc";
System.out.println((s1 == s2) + " : " + s1.equals(s2));
// 结果是2个true
System.out.println(s1 == s2 + " : " + s1.equals(s2));
// flase
/*
* 由于运算符的优先级问题,System.out.println(s1 == s2 + " : " + s1.equals(s2))
* 等价于System.out.println(s1 ==( s2 + " : " + s1.equals(s2)));
* 也就是“==”优先级低于“+”,所以输出false。 如果将(s1 ==
* s2)加括号就是两个true(String用常量初始化的常量池作用)
*
*
* 字符串常量池的原则是,在编译期间可以确定内容的字符串,直接放到常量池 String s1 = "ab" + "c";
* 这条语言在编译时,可以确定 s1 = "abc",因此它与 s2 = "abc" 指向同一对象
*
*/
}
}
s1 == s2与 s1.equals(s2)
最新推荐文章于 2024-05-11 15:07:54 发布