java里,String s;和new String( );有什么区别吗

来源:百度知道 编辑:UC知道 时间:2024/05/21 11:21:40
String s="1";
new String("1");
有什么区别吗

当然有区别
String s="1";
s是存储在栈里
new String("1");
s是存储在堆里
关于堆很栈的区别看下这篇文章:http://developer.51cto.com/art/200812/99540.htm

都是在内存中存储了1,但是上面的同时还存储了变量名
String s="1";
s是存储在栈里
new String("1");
s是存储在堆里

String s = "1",
new String("1");
除了内存分配不同外还有一点:对于 String s = "1",如果栈内存中已经有个String,他的值也正好是 “1”,那么 s 会直接指向已有的那个,而不会新分配栈内存。
而对于 new String("1"),无论如何都会重新分配一个堆区间去存放他。

堆栈中会有一些区别吧

String s="1";
这个先在堆中建立S 然后在栈里建立一个空间存放1,再将S指向1
new String("1");
这个是在栈里建立一个空间存放1,而没有在堆中进行关联

好像是这个

没有太大的区别。
都是在内存中存储了1,但是上面的同时还存储了变量名

String s="1";定义一个名为s值为‘1’的String型对象
new String("1");新建一个值为‘1’的String型对象