public class Hello { public static void main(String[] args) { String s1="hello";
String s2="hello";
System.out.println("print s1==s2: "+s1==s2);
System.out.println("print (s1==s2): "+(s1==s2));
}
} 结果却是:false //第一个输出竟然没有"print s1==s2:"中的内容
print (s1==s2): true //第二个结果却无故变了个样!望高手解答~~~~在线等!!
String s2="hello";
System.out.println("print s1==s2: "+s1==s2);
System.out.println("print (s1==s2): "+(s1==s2));
}
} 结果却是:false //第一个输出竟然没有"print s1==s2:"中的内容
print (s1==s2): true //第二个结果却无故变了个样!望高手解答~~~~在线等!!
System.out.println("print s1==s2: "+s1==s2);
改成:
System.out.println("print s1==s2: " + (s1 == s2));
先运算的“+”,再进行“==”判断,所以是false。
第二句System.out.println("print s1==s2:"+(s1==s2));
先判断的“s1==s2”,原因是有括号,再进行“+”运算,所以是true。
这属于运算优先级问题!在写程序时一定要注意运算优先级!
==
System.out.println( ("print s1==s2: "+s1) == s2);
以后编程的时候,严格按照运算符的顺序,就可以避免了
应该等价于:
System.out.println( ("print s1==s2: "+s1) == s2);
第二个的话:"Hello"为常量字符串,s1与s2都指向它,s1==s2比的是存放地址,自然就一样了!
借用java编程思想里面的话:ulcer addicets really like c a lot