关于equals的问题以及对象如何分配引用
来源:7-2 项目作业
大吉他
2021-03-14 17:18:48
== 对于基本类型来说是值比较,对于引用类型来说是比较的是引用;而 equals 默认情况下是引用比较,只是很多类重新了 equals 方法,比如 String、Integer 等把它变成了值比较,所以一般情况下 equals 比较的是值是否相等。
这个说法是正确的吗?
2. 对象如何分配引用
创建一个字符串变量并赋值:String s="123",并在栈空间中给分配一个对象引用
在创建一个字符串变量String s1="123",值和对象s的相同,这时候系统会自动在堆空间检索存不存在相应的值,如果存在则返回与对象s相同的引用指向堆中的值?
在创建一个变量:String s2=new String(“123”);因为是new出来的字符串,所以系统会直接重新创建?
1回答
同学你好,关于同学的问题,有如下回答:
1、同学的说法不太正确。
如果是Integer等数值类型,或者String,重写equals()方法后,比较的是值是否相等。如果是其他,比如说Student学生类,重写equals()方法后,比较的是两个Student类对象的属性是否相同。
2、这里有一个字符串常量池的概念。使用String s = "123",创建对象时,会先判断一下字符串常量池中是否有“123”这个字符串。如果有,则直接将s的引用指向字符串常量池中“123”。如果没有,会先创建一个字符串“123”,然后将创建的字符串放入字符串常量池中。
String s1="123"创建对象时,此时字符串常量池中已经有“123”这个字符串,将s1的引用将直接指向字符串常量池中的“123”。
String s2=new String(“123”);是new出来的字符串,会创建一个对象。
祝学习愉快~
相似问题