String类型的 == 和 equals() 判断,及运算符优先级的问题

来源:互联网 发布:格式化数据恢复 编辑:程序博客网 时间:2024/05/10 13:03
public class Test {    public static void main(String[] args) {        String s1 = "ab" + "c";        String s2 = "abc";        System.out.println(s1 == s2 + " : " + s1.equals(s2));    }}

上面程序运行的输出结果是什么呢?
在这题目里有两个知识点
== 判断的是 变量所指向的引用地址是否相同,equals()判断的是引用所指向的值是否相等。编译器在编译时就会把 s1 =“ab”+”c” 的值合并成s1=“abc”,我们用反编译器查看 Test.class即可验证。

第二个就是 运算符优先级的问题,+的优先级高于 ==,所以我们的输出语句实际输出的是 (s1 == (s2 + ” : ” + s1.equals(s2)))很显然,输出结果为false。

如果把 s1==s2外面加上括号则可以输出 两个 true。
我们再把 s1改成 s1 = arg0[0] + argo[1],在运行是再传入值
java Test “ab”“c”则会输出 false : true 。

0 0