Java-String的问题

我还是想问个问题:String  a=“hello”,这种情况下,“hello”在编译期间就存储在jvm的方法区的常量池中;String aa=new string(“hello”),这种情况下的“hello”也是在编译期间就存储在常量池中了吗?还是在堆上分配空间呢?#Java工程师#
全部评论
代码不会骗人,这是我写的测试程序,答案不是你说的。 public class TestJava { static String s1="hello"; String s2=new String("hello"); String s3=new String("hello"); public static void main(String[] args) { TestJava aa=new TestJava(); aa.match(); } public void match(){ System.out.println(s1==s2); System.out.println(s2==s3); } } 结果是:false,false。 说明:不管常量池中是否有“hello”这个字符串,每次new String()这种方式创建String类型变量时,都会在堆中创建一个String类型的“hello”,所以s1和s2,s3的值都是不同的,并且s2和s3也是不同的。
点赞 回复 分享
发布于 2015-08-30 21:21
有一个string pool。string str =“hello”。首先会在string pool中找有没有hello。有则直接返回给str。没有则创建一个。string str = new string(“hello”)。现在string pool看有没有hello有则不创建没有则创建。然后再在堆中创建一个hello返回给str。所以有一道常见的题问new的方式创建了几个对象。2个就是这么来的
点赞 回复 分享
发布于 2015-08-27 23:35

相关推荐

不愿透露姓名的神秘牛友
11-27 10:28
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-26 18:54
说等下个版本吧的发呆爱好者很贪睡:佬最后去了哪家呀
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务