步步深入Java — ==和equals
当你在程序中遇到判断变量或对象是否相等的情况,想到的应该是用equals或==,两者的区别在哪?先来了解一下内存中的堆和栈。
public class TestEquals { public static void main(String[] args){ int a=1; int b=1; int c=2; System.out.println(a==b); //true System.out.println(a==c); //false System.out.println(a.equals(b)); //编译不通过 } } <span style="LINE-HEIGHT: 1.5; FONT-SIZE: 10.5pt"> </span>
public class TestEquals { public static void main(String[] args){ Integer intA=new Integer("123"); Integer intB=new Integer("123"); Integer intC=new Integer("456"); //比较的是地址,intA和intB为不同的对象,故其地址不同 System.out.println(intA==intB); //false //同上,此对象内容也不同 System.out.println(intA==intC); //false //比较的是对象的内容 System.out.println(intA.equals(intB)); //true //对象内容不同 System.out.println(intA.equals(intC)); //false } }<span style="BACKGROUND-COLOR: rgb(255,255,255)"><span style="font-family:宋体;"><span style="FONT-SIZE: 12pt"><span style="font-size:18px;"> </span></span><span style="LINE-HEIGHT: 21px"> </span></span></span>
public class TestEquals { public static void main(String[] args){ Person a=new Person(123); Person b=new Person(123); Person c=new Person(456); //比较的栈中保存的地址 System.out.println(a==b); //false System.out.println(a==c); //false //引用类型比较两个对象的引用地址 System.out.println(a.equals(b)); //false System.out.println(a.equals(c)); //false } }
public class TestString { public static void main(String[] args){ String strA="123"; String strB="123"; String strC="456"; //比较内容是否相同,在常量池中只存在一个变量strA的值123,strB直接去用这个值即可 System.out.println(strA==strB); //true //内容不同 System.out.println(strA==strC); //false //比较的是内容 System.out.println(strA.equals(strB)); //true //内容不同 System.out.println(strA.equals(strC)); //false } }
public class TestString { public static void main(String[] args){ String strA=new String("123"); String strB=new String("123"); String strC=new String("456"); //比较的两个对象的地址 System.out.println(strA==strB); //false //地址不同 System.out.println(strA==strC); //false //比较的是内容 System.out.println(strA.equals(strB)); //true //内容不同 System.out.println(strA.equals(strC)); //false } }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。