String a = "abc"和String a = new String("abc")比力

开发者 2024-10-5 08:57:19 46 0 来自 中国

  • String a = "abc" 创建了0个或1个对象。
    起首在栈中界说一个引用变量a,查抄字符串常量池中是否存在"abc",存在则直接指向"abc"的地点(指向的是字符串常量池中的地点),不存在则先在常量池中创建"abc"再指向其地点。
    常量池中不存在"abc"字符串:
    (1)在栈中创建3个char型字符'a','b','c'
    (2)在堆中new一个String对象,它的值是刚才在栈中创建的三个char型值构成的数组{'a','b','c'}
    (3)把这个String对象放进字符串常量池中,
    (4)将a指向这个对象在字符串常量池中的地点。
String a = "abc";等价于char data[] = {'a', 'b', 'c'};String a = new String(data);

  • String a = new String("abc")创建了1个大概两个对象
    起首在栈中界说了一个引用变量a,然后在堆中new一个String对象,a指向这个对象,然后new出来的String对象再指向常量池中的abc。

    2.png
  • 比力
        String a = "abc";        String b = "abc";        String c = new String("abc");        String d = new String("abc");        System.out.println(a == b);        System.out.println(a == c);        System.out.println(c == d);效果:true、false、false
new String("abc") 无论字符串常量池中是否存在“abc”,都会在堆中天生一个新的对象,c和d的引用指向各自堆的地点,堆引用才指向常量池。以是a、c、d三者不相称。
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-10-18 16:52, Processed in 0.109564 second(s), 35 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表