'=='和equals区别
'=='和equals在java中都有着比较作用,但是他俩的比较区别是什么?下面进行举例赘述
想要弄明白上述分体,首先来看看Java内存的存储原理
基本类型数据存储在栈
例如 byte:'Byte'、short:'Short'、int:'Integer'、float:'float'、boolean:'Boolean'、char:'Char'
引用类型数据存储在堆(相当于new 出来的对象在堆中存储)
例如 class(类)、interface(接口)、array(数组)
1.非String类无重写equals方法与== 无区别,都比较的是存储的地址(hashcode)
2.String类(重写了equals和hashcode方法,将比较地址变为比较内容)
String s1 = new String("java");
String s2 = new String("java");
System.out.println(s1==s2); //false 两个类存储在'堆'中,栈中存的为两个new出来新的地址,所以不一样
System.out.println(s1.equals(s2)); //true 内容相同
特例:字符串的字面值存储在’字符串池’中,字符串池又在’方法区’中,这样存储可以实现共享
String s1 = "java";//在方法区中创建'java'字符
String s2 ="java";
System.out.println(s1==s2); //true '方法区'中的'字符串池'中已经存在"java"这个值,所以为同一地址
System.out.println(s1.equals(s2)); //true 内容相同
如果有什么遗漏或者出错的地方欢迎大家补充在下方评论区,我会认真学习大家的意见,一起进步!