关于创建String对象的方法的理解
1. String s1 = "imooc"; 在编译阶段会在内存的字符串常量池中先去找有没有一个 "imocc" 的字符串常量,因为常量池中相同 的字符串只会有一个,所以如果已经有 "imocc" 这个字符串常量就让s1指向这个常量,如果没有就在 常量池中创建一个 "imooc" 常量。 2. String s2 = new String(); String s3 = new String("imooc"); 因为new Sring()的话它每次都会在堆中新建一个对象,不管这个对象的值是否相同。 String s2 = new String("imooc"); String s3 = new String("imooc"); 所以 s2 == s3 返回false, 但是因为String已经重写了Object的equlse()方法, 所以 s2.equlse(s3)返回的true。 3. Sring s4 = new String(); String s5 = new String(""); 我想问一下,s4 表示创建一个空字符串对象, s5 表示的是不是也是创建一个空字符串对象 他们在new String 对象的时候,堆栈里有没有什么不一样的呢?
9
收起
正在回答
3回答
同学你好,可以这样理解:
1、Sring s4 = new String();表示创建一个s4对象,Java会隐示的为它初始化为长度为0的字符串
String s5 = new String("");表示创建一个s5对象,并手动的初始化为长度为0的字符串
所以equals进行比较返回为true,但是都是new的对象,但在内存中的地址不同,所以‘==’比较返回false
2、在堆中的情况:
因为都是new的对象,所以每次都会在堆中新建对象的。
String s5 = new String(""):会产生两个对象,在类加载时会创建一个""对象放到字符串常量池中,在运行时会从常量池中赋值一份到堆中,并且将堆中这个对象的引用交给s5持有。
Sring s4 = new String();与new String("")堆中创建的方式一样的哦~同样会产生两个对象,在类加载时会创建一个""对象放到字符串常量池中,在运行时会从常量池中赋值一份到堆中,并且将堆中这个对象的引用交给s4持有。
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
BraveSong灬
2019-08-08 11:05:55
就是new的时候在堆里开辟了2块空间每个空间都有一个16进制的编号表示地址,a和b就分别指向这两个不同的地址,调用方法时定义的a.b实在里栈开辟空间存放ab指向的地址
1. Java 零基础入门
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星