以下JAVA代码为什么只创建了一个对象? String s1="bc"; String s2="bc";
我大概知道所谓的s1,s2应该只是一个类似与指针的东西,不知道是什么机制让s1,s2智能地指向了同一个对象啊?如果Strings1=newString("bc");Str...
我大概知道所谓的s1,s2应该只是一个类似与指针的东西,不知道是什么机制让s1,s2智能地指向了同一个对象啊?如果 String s1=new String("bc"); String s2=new String("bc");呢
展开
展开全部
在Java当中,String是一个比较特殊的类,跟其他引用类型的变量不同,String在某些时候可以当作基本类型的变量来看待,这就是题目当中的s1和s2跟只创建一个对象的道理,创建的两个变量都指向了同一块内存空间。
String s1=new String("bc"); String s2=new String("bc");则是创建两个对象,每次new的时候都是在内存当中另外开辟出一块空间分别储存。
还有一句很重要的话就是:String永远不会发生改变,任何对String的操作都是另外返回一个新的String,而不是在原有的String上进行修改:
例如:String s1 = "bc";
String s2 = s1;
s1 = "de";
这时输出s2会发现s2仍然等于"bc"
正是String的这个特性,占用太多内存空间,后来才有了StringBuffer/StringBuilder两个类。
关于String这个比较特殊类的用法还有很多,楼主有兴趣的话可以单独找来看看。
String s1=new String("bc"); String s2=new String("bc");则是创建两个对象,每次new的时候都是在内存当中另外开辟出一块空间分别储存。
还有一句很重要的话就是:String永远不会发生改变,任何对String的操作都是另外返回一个新的String,而不是在原有的String上进行修改:
例如:String s1 = "bc";
String s2 = s1;
s1 = "de";
这时输出s2会发现s2仍然等于"bc"
正是String的这个特性,占用太多内存空间,后来才有了StringBuffer/StringBuilder两个类。
关于String这个比较特殊类的用法还有很多,楼主有兴趣的话可以单独找来看看。
展开全部
因为他们的内容是一样的,首先String对象的创建都是放入常量池里面的。然后为了节约内存的开辟,它在创建的时候会去找这个常量池,如果有这个内容相同的对象需要创建的时候,它会直接把地址指向这块内存,所以只有一个实例。希望能帮到你!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
前者与后者是两种不同的构建方式
前者 是把 “bc”放在 一个常量池中 当String s1="bc" 时 S1的地址指向 存放"bc"的地址
这时 s2进来了 他会到常量池中 找有没有"bc"有就指向 "bc"没有就重新开辟一个地址
后者 是先为 s1 s2 开辟一个空间 然后再再次基础上开辟 你一块地址空间 存放各自的"bc"
前者 是把 “bc”放在 一个常量池中 当String s1="bc" 时 S1的地址指向 存放"bc"的地址
这时 s2进来了 他会到常量池中 找有没有"bc"有就指向 "bc"没有就重新开辟一个地址
后者 是先为 s1 s2 开辟一个空间 然后再再次基础上开辟 你一块地址空间 存放各自的"bc"
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询