==仍是equals,返回true仍是false?数据库
先说理论是这样的: 一、==操做符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同, 二、equals方法是用于比较两个独立对象的内容是否相同,就比如去比较两我的的长相是否相同,它比较的两个对象是独立的。 看完理论后仍是懵逼。测试
很少说了,先上测试代码, 里面包含了int,Integer,double,float,string和object类型的数据比较返回true仍是false。看看下面代码,若是不看结果能判断出输出的结果是true仍是false吗?反正我是判断错误好几个,更懵逼了。翻译
public static void main(String[] args) { String str="1000"; float num1=1000; Integer num2=1000; double num3=1000; int num4=1000; int num5=1000; Integer num6=1000; Double num7=(double) 1000000; Double num8=(double) 1000000; double num9=1000; Object o1=100; Object o2=100; System.out.println("num2==num6结果为:" + (num2==num6)); System.out.println("num4==num5结果为:" + (num4==num5)); System.out.println("num1==num3结果为:" + (num1==num3)); System.out.println("num2==num4结果为:" + (num2==num4)); System.out.println("num2.equals(num4)结果为:" + num2.equals(num4)); System.out.println("num2.equals(num3)结果为:" + num2.equals(num3)); System.out.println("num1 == num2结果为:" + (num1 == num2)); System.out.println("Integer.valueOf(str).equals(num1)结果为:" + Integer.valueOf(str).equals(num1)); System.out.println("Integer.valueOf(str)==(num1)结果为:" + (Integer.valueOf(str)==(num1))); System.out.println("num2.equals(num1)结果为:" + num2.equals(num1)); System.out.println("o1.equals(o2)结果为:" + o1.equals(o2)); System.out.println("o1==o2 结果为:" + (o1==o2) ); }
看下输出结果和本身判断的是否一致。 输出结果为code
num2==num6结果为:false num4==num5结果为:true num1==num3结果为:true num2==num4结果为:true num2.equals(num4)结果为:true num2.equals(num3)结果为:false num1 == num2结果为:true Integer.valueOf(str).equals(num1)结果为:false Integer.valueOf(str)==(num1)结果为:true num2.equals(num1)结果为:false o1.equals(o2)结果为:true o1==o2 结果为:true 此时已经陷入了死循环,想判断正确结果得知道理论依据,看完理论以后仍是判断不对结果,想判断结果得知道理论依据,看完理论依据以后仍是判断不对结果…… 理论不太容易懂,仍是翻译成白话更好理解。
总结要点: 一、Integer类型的 数值在-128-127之间 两个值==比较,结果为true,超过这个范围好比值为1000结果为false,equals()比较结果都为true; 二、int类型比较==或equals值相等,结果都为true; 三、int和float或double类型相等的数值比较:==比较时为true,equals比较时为false。(由于类型不一样); 四、float或double数值相等比较,:==比较时为true,equals比较时为false。(由于类型不一样); 五、object两个相同值比较,==或equals比较返回结果都为true;
解决问题: 一、从数据库查询数据拿到集合后要对Integer类型id为200的数据进行处理,if(list.get(i).getId==200){doSmth};这样的程序会一直不执行; 二、笔试时会出现各类==或equals比较的题,把这个关系搞明白,都能作对。
还有不足,欢迎你们补充,纠偏。对象