String a="123";String b=a;一共创建了多少个对象?

解决方案 »

  1.   

    一个对象,也就是字符串"123",大家都说2个对象指向同一个地址,在java中不存在2个对象指向同一个地址的说法,只能说多个引用指向同一个对象。
      

  2.   

    一个对象。
    String 类是不可改变的,它的值是在常量池中的。所以你一旦创建了 String 对象,那它的值就无法改变了。
      

  3.   

    个人理解是两个:首先123位于常量池中,直接加载的,没有对象的创建。a占了一个空间,直接引用123的内存地址,算是创建了一个对象;b是对a的引用,变相引用123的内存地址,应该也算是创建了一个对象。
      

  4.   

    两个对象,虽然地址都是同一个,a对象的地址是123在常量池中的地址,而b对象则是引用了a对象的地址,同样指向了常量池中的123.
      

  5.   

    public class Test2 {
    public static void main(String[] args) {
    String a = "123";
    String b = a;
    String c = "1";
    }
    }看图说话
    老实讲我也是小白,在这给提供一个思路而已
      

  6.   

    两个对象呀,看15楼提供的演示图片中的id,绝对是分配了两个对象(开辟两处内存空间),Java这样的设计应该是为了保证String类型的灵活性与高可用。
      

  7.   

    字符串常量池多了个123,如果这算对象的话那就是一个。至于a和b,都是变量名(放在栈里),有指向123那块地址的指针。这种方式不会在堆空间创建String对象,可以通过查看类文件(.class)。查看类文件的方式可以使用jdk提供的javap看,并没有new
      

  8.   

    我确定是一个对象。String a="123";String b=a;其实只有一个对象被创建,第二个是在常量池中直接拿到了对象的内存地址。
    https://mp.csdn.net/postedit/86007922
      

  9.   

    我的博客有关于string的详细解答,可以解决你的困惑
    https://mp.csdn.net/postedit/86007922
      

  10.   


       String a="123" 在类被加载时候创建,然后String b=a  只是将b的引用指向了和a同一个对象身上而已,这个过程并没有任何对象创建。
      

  11.   

    String a="123";
    在栈上创建了一个引用型变量a,在常量池中创建来一个字符常量“123”,并将“123”的地址复制给引用型变量a。
    String b=a;
    在栈上创建了一个引用型变量b,并将a的值赋给b,既b也指向了字符常量“123”。
    总结,总共在栈上创建了两个引用型变量a和b。在常量池中创建了一个字符常量。
    其实严格来说,这个字符常量并不是代码执行到这里才创建,而是加载这个类的时候就创建的。
      

  12.   

    每一个 String 对象包含了: 
    private final char value[];  
    private int hash;
    private static final long serialVersionUID = -6849794470754667710L;serialVersionUID 如果不算的话, 就很清楚了.