楼主之前一直区别不了==和equals的用法,上网搜索了很多资料,也问了一些技术大佬。所以总结了一下分享给大家。
==用于比较两个变量的地址,equals用于比较两个变量的内容
String str1="test";
String str2="test";System.out.println(str1==str2); //true
int num1=123;
int num2=123;
System.out.println(num1==num2); //true
Integer i1=new Integer(2);
Integer i2=new Integer(2);
System.out.println(i==i2); //false
System.out.println(i1.equals(i2));//true
以上代码的输出结果是true这是为什么呢?
str1是在堆中创建一个变量叫做str1,在栈中有一个地址(二进制的地址),这个里面的值是test,
当执行str2="test"的时候 ,去栈中查找有没有test 如果有 就将这个地址指向了str2,没有的话就创建新的地址。
但是String类型属于引用类型有一个equals方法
System.out.println(str1.equals(str2));
这个方法比较的是两个变量的值是否相等,注意:只有基本类型的包装类有这个方法。
基本数据类型的变量就没有这个方法了
所以说==用于比较两个变量的内存是否相等。而字符串的比较一般用于equals方法
这是本人的总结,如果有更好的希望大家指出来,多多批评。