java中的==和equals的区别

时间:2022-01-31 16:11:18

    楼主之前一直区别不了==和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方法

            这是本人的总结,如果有更好的希望大家指出来,多多批评。