关于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回答

好帮手慕阿满

2021-03-14

同学你好,关于同学的问题,有如下回答:

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出来的字符串,会创建一个对象。

祝学习愉快~

0

0 学习 · 16556 问题

查看课程