首页 > 编程语言 > 详细

【JAVA】String中两种初始化方式比较

时间:2020-05-09 22:41:27      阅读:81      评论:0      收藏:0      [点我收藏+]

String s1 = “abc”

  • 这一句话做了什么操作:

    • 首先在常量池中查找“abc”,如果没有则创建对象
    • 在栈中创建s1的引用,
    • 将s1直接指向对象abc
    • 因此在这里abc是常量池中的对象,如果声明另一个String类型的对象引用,并将它指向对象‘abc’,则这两个引用指向的是同一个常量池中的对象。
  • 代码示例:

String s1 = "abc";//"abc"是一个对象,将对象赋予类变量s1
String s2 = new String("abc");//这里是两个对象,在内存中存在两个,包括对象abc 和 new 出来的对象
String s3 = "abc";  //因为String类型数据是不可变的,所以‘abc’被放在了常量池中,这里的‘abc’?和s1的‘abc’是
							//同一个常量abc对象,因此二者的内存地址是一样的。
							
System.out.println(s1==s2);//false
System.out.println(s1==s3);//true 这是这号i

  • 图示辨析:

public class StringDemo {
 
    public static void main(String[] args) {
        String str = "Hello";
        str = str + "World";
        str += "!!!";
        System.out.println(str);
 
}
}

2. String s = new String(“abc”);

这句话和常规的对象创建是一样的,就是在内存开辟空间,在堆内存创建String对象,将内存地址赋予栈内存中的引用变量。

参考链接

END

【JAVA】String中两种初始化方式比较

原文:https://www.cnblogs.com/anliux/p/12860115.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!