JAVA 中直接赋值和new创建有什么不同(请高人解答)

publicclassStudent{publicStudent(){}publicstaticmain(String[]age){Stringx="bv";String... public class Student{
public Student(){}
public static main(String[] age){
String x="bv";
String v=new String("bv");
}
}

例题中,x和v的效果是一样的。
我想问的是他们的作用域也是一样的吗?
垃圾回收器,怎样回收它们?
它们有什么区别!
void
展开
 我来答
百度网友0b175ed
2008-09-15 · TA获得超过468个赞
知道小有建树答主
回答量:453
采纳率:0%
帮助的人:344万
展开全部
我个人的理解
String x="bv";这个是在栈中创建的,栈中的数据具有不可更改性,就是说你再创建一个String y="bv";它会先在栈中寻找字面值为bv的地址,如果存在这样的地址就指向它(否则就在栈中新开辟一个字面值为bv的内存地址) 因此这儿x==y 因为他们指向同一块内存地址 无论== equals结果都是true

String v=new String("bv"); 通过new的方式在堆创建一个对象,new是在堆中开辟一个新的处女地,因此即便你再String vvv=new String("bv");v和vvv也不可能相等。

当然你题目中的x v 分别处于栈、堆中 也不可能相等
xifo
2008-09-15 · TA获得超过898个赞
知道小有建树答主
回答量:325
采纳率:0%
帮助的人:350万
展开全部
简单的问题,就用简单的方式回答吧:

String x="bv";只创建了一个对象,这个字符串对象“bv”保存在堆中。
String v=new String("bv");实际上创建了两个对象,一个是在堆中的对象"bv",另一个是单独的字符串对象,并且在适当的时候前者会回收,而后者不会。这种情况应避免出现,因为会造成不必要的内存和时间开销。

另外,如果后面紧跟一句String y="bv";同样会创建一个对象,但不会在堆中重复创建,只是生成一个新的引用。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
pink629
2008-09-15 · TA获得超过236个赞
知道答主
回答量:133
采纳率:0%
帮助的人:192万
展开全部
String x="bv"; 只是创建了一个指向对象"bv"的一个引用,在缓存中查找如果有直接指向,如果没有,会new出一个新的"bv"对象
String v=new String("bv"); 无论如何都直接new出一个新的"bv"对象
作用域一样,gc回收时如果是创建了新对象销毁,否则销毁引用
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
甜V酒
2008-09-15 · TA获得超过830个赞
知道小有建树答主
回答量:1067
采纳率:33%
帮助的人:388万
展开全部
给你打个比方就明白了,可以这样比方:
x和v就是一个遥控器,字符串"bv"就是一个机器人,一个遥控只能控制一个机器人;
String x="bv"; :就是把一个已经存在的机器人(bv)的控制权交给一个新制造的遥控器(x)
String v=new String("bv"); 就是在内存中新创造一个机器人(bv),并把它的控制权交给一个新制造的遥控器(x)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
维思迈
2008-09-15 · TA获得超过223个赞
知道小有建树答主
回答量:255
采纳率:0%
帮助的人:213万
展开全部
效果是完全一样的。第一个。String x ="bv";是在文字池(pool of literal strings)中生成一个字符串对象。然后x引用这个对象。
第二个是在文字池中生成对象后。在堆中复制一个与前面一样的对象。然后v引用堆中的对象。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(7)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式