public class Test1 { public static void main(String[] args) { String s1 = "ab" + "c"; String s2 = "abc"; System.out.println(s1 == s2 + " : " + s1.equals(s2)); } }
由于运算符的优先级问题,System.out.println(s1 == s2 + " : " + s1.equals(s2))等价于System.out.println(s1 ==( s2 + " : " + s1.equals(s2)));也就是“==”优先级低于“+”,所以输出false。 如果将(s1 == s2)加括号就是两个true(String用常量初始化的常量池作用)。
[quote=引用 2 楼 jsjdtb356 的回复:] 只输出false 首先判断s1==s2,“==”的意思是引用类型的变量指向堆内存中的同一个对象,s1=“ab”+“c”;堆内存中应该是一块放的ab字符,一块放的是c字符,而s2=“abc”指向的应该是一块方有abc的内存,所以不相等。(字符串常量可能放在常量区) 再判断s1.equals(s2),string类的equals方法是经过重写的,规则定义的是只要字符串内容相等则返回true 最后,System.out.println(s1==s2.....)调用的是println(boolean x)方法,只能返回一个true或者false,想全返回在s1==s2外面加括号,使println调用println(String x)
62,614
社区成员
307,326
社区内容
加载中
试试用AI创作助手写篇文章吧