注册 登录
编程论坛 JAVA论坛

String是类 为什么不需要new对象

不落夕阳 发布于 2018-07-17 16:53, 5634 次点击
String?
5 回复
#2
CharlesClear2018-07-17 17:38
new的时候会在堆上创建一个新对象,不new的话只是定义一个引用指向堆里面已经存在的对象。
string 可以new  也可以不new。
#3
wlrjgzs2018-07-18 09:33
很简单,String是一个内置对象,java已经帮我们new了。
#4
不落夕阳2018-07-19 19:51
回复 2楼 CharlesClear
就是说堆里面已经存放一些字符串对象,如果String q=“b”;当堆中已经存在“b”对象,就直接把b的地址给q,没有b的话就new对吧,是这个意思吗
#5
yjh4619412982018-07-21 00:52
回复 4楼 不落夕阳
不是你说的那样!
首先内存分四大块:1. 栈区2. 堆区3. 数据区4. 代码区
如果写: String str = "123";那么 “123”会保存在 数据区, 数据区一般存一些常量,这样写java会把“123”认为是常量 放入数据区。
如果写: String str = new String("123");那么这时的 “123”是放在堆中的
所以:

当写 ->   String str1 = "123"; String str2 = "123";  那么: str1 == str2 的结果是 true;这是因为,str1 的赋值过程中 会将“123”认为是一个常量,放入到数据区, 当str2赋值时, 在数据区找到了有一个“123”存在,这时就将这个“123”的引用给了 str2,也就是说: str1 和 str2 有相同引用。这样做的目的是为了 节省内存,
当写 -> String str1 == "123"; String str2 = new String("123");那么 str1 == str2 的结果是 false;
#6
不落夕阳2018-07-25 10:10
回复 5楼 yjh461941298
哦原来是这样的啊,那么Integer也是同理咯
1