java中字符串定义问题

publicclassStringDemo1{publicstaticvoidmain(String[]args){Strings="abc";Strings1=newS... public class StringDemo1 {
public static void main(String[] args){
String s="abc";
String s1=new String("abc");
//s在内存中有一个对象

//s1在内存中有两个对象

}
}

上面的代码中,s在内存中有一个对象,而s1在内存中有两个对象怎么回事,无法理解。
展开
 我来答
帽子狗
2015-08-21 · TA获得超过942个赞
知道小有建树答主
回答量:611
采纳率:50%
帮助的人:552万
展开全部
好多地方喜欢搞这种面试题...
-----------------
你可以这么理解
String s="abc";//这样有一个了
String s1=new String(s);//本来有一个s 现在多出来一个s1
------------------------------------------------
//不过你继续这么写
String s2="abc";//还是只有两个String 因为前面s="abc"了;所以现在s=s2
//继续这么写
String s3=new String(s);//这样子又会多出来一个String s3和s1不一样 因为他是new(新)的
--------------------------------------
造成以上现象的原因是java看着String比较特殊 所以给他弄了一个常量池子来装用过的String
比如"abc","xxxx","哦耶"这些都会在第一次使用放入常量池中 第二次用到常量池中的字符串时就不会创建新的 直接从常量池里面拿 所以"a" 和"a"是一个东西,"abc"和"abc"也是一个东西
但是如果new String();那么他就会去创建String 放入堆(和常量池不是一个地方)中,所以new String("a")和new String("a")不一样 因为是新的嘛
------------------------------------------
这样new String("abc")就是先从常量池拿出abc或者创建abc放入常量池 然后在堆中创建new String("abc")所以有了两个
sust_net
2015-08-21 · TA获得超过562个赞
知道小有建树答主
回答量:254
采纳率:0%
帮助的人:164万
展开全部

这是两种形式来创建String对象。

Java内存有【堆】和【栈】;

第一种是先在栈中创建一个对String类的对象引用变量str,然后查找栈中有没有存放"abc",如果没有,则将"abc"存放进栈,并令str指向”abc”,如果已经有”abc” 则直接令str指向“abc”。

第二种是用new()来新建对象的,它会在存放于堆中。每调用一次就会创建一个新的对象。

String str1 = "abc";
String str2 = "abc";
String str3 =new String ("abc");
String str4 =new String ("abc");

如上定义:str1和str2指向的是内存中同一个对象,str3和str4则是不同的对象。到此应该有些感觉了哈。

需要注意的是:String str="abc";这个定义感觉上是创建了String类的对象str,但实际上可能并没有被创建,只是找到了之前已经存在的一个对象。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
吉安仔仔龙
2015-08-21
知道答主
回答量:5
采纳率:0%
帮助的人:2.1万
展开全部
第一句:
String s="abc";

1,"abc" 这就已经在内存中创建了一个内容为 abc 的字符串
2,String s="abc"; 创建一个s对象 并且指向 abc 这个字符串在内存中的地址

第二句:
String s1=new String("abc");

1,"abc" 这就已经在内存中创建了一个内容为 abc 的字符串
2,new String("abc"); new 的时候又创建了一个字符串并且传入 abc 这个字符串

简单来说 "" 包含的内容会存储在内存中了, new 也会在内存中开辟一个新的内容
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式