如果进行比较的两个操作数都是数值类型,即使它们的数据类型不相同,只要它们的值相等,也都将返回true。例如97=='a'返回true,5.0==5也返回true。
如果两个操作数都是引用类型,那么只有两个引用变量指向同一个对象才会返回true。
对于Integer类型而言:
如果Integer ina=2;Integer inb=2;则ina==inb的结果为true;如果Integer biga=128;Integer bigb=128则biga==bigb的结果为false;
原因是java会把-128~127的整数进行缓存,如果在这个区间内的就会直接指向已经存在的值,而不在这个区间内的则会重新创建一个Integer实例。
对String类型而言:
当java程序直接使用形如“hello”的字符串直接量(包括可以在编译时就计算出来的字符串值)时,JVM将会使用常量池来管理这些字符串;当使用new String("hello")时,JVM会先使用常量池来管理"hello"直接量,然后再用string的构造器来生成新的string对象。
String s1="疯狂java";
String s2="疯狂"+"java";
String s3=new String("疯狂java");
String s4="疯狂";
String s5="java";
String s6=s4+s5;
s1==s2会返回true;
s1==s3会返回false,因为s3是new出来的
s1==s6会返回false,因为s6不能在编译时确定