String str="abc";
String str1="abc";
Sstrin str2= new String("abc");str1 和str 是不是放在堆里面, 
这两种初始化到底有什么区别

解决方案 »

  1.   

    str和str1当然没区别啊,只是变量名不一样。
    str2是有区别的,前面两个都只创建了1个对象,而str2创建了2个对象
      

  2.   

    str 与 str1 除了变量名不一样,其他都一样,也是指向同个对象
    str2 则重新new 了个对象
      

  3.   

    String str="abc";
    这时是两个对象 一个str对象,abc字符串对象(abc放到字符串常量池中),str指向abc。
    String str1=“abc”
    创建了另一个str1对象。 abc在常量池中找到了则不再创建。
    str2
    同str1。
      

  4.   

    str和str1当然没区别啊,只是变量名不一样。
    str2是有区别的,前面两个都只创建了1个对象,而str2创建了2个对象常量池不是堆的一部分 JVM中的常量池在内存当中是以表的形式存在的
      

  5.   

    既然常量池有了"abc" 那为什么new的时候, 不直接让str3这个引用指向已经存在的"abc"对象
      

  6.   

    String str = new String("abc");  
    String str = "abc";  
    两种的形式来创建,第一种是用new()来新建对象的,它会在存放于堆中。每调用一次就会创建一个新的对象。  
    而第二种是先在栈中创建一个对String类的对象引用变量str,然后查找栈中有没有存放"abc",如果没有,则将"abc"存放进栈,并令str指向”abc”,如果已经有”abc” 则直接令str指向“abc”。  
      

  7.   

    str1 和str 、str2这三个对象放在栈里边,他们的内容放在堆里边。使用直接赋值的方式只需要一个实例化对象即可,而使用new String()的方式则意味着要开辟两个内存对象。开发中最好使用直接赋值的方式完成
      

  8.   

    public class Test {
    public static void main(String[] args) {
                    String s1 = "abc";
    String s2 = "abc";
    String s3 = new String("abc");

    System.out.println(s1==s2);  
    System.out.println(s1==s3);  
    System.out.println(s2==s3);
      }
    }
    看看这个,其实是一样的道理。
      

  9.   

    你可以利用intern()和equals()来做一下试验
      

  10.   

    String是数据类型中的特例。
    String类型的数据全部由String Pool统一管理。
    String Pool中的创建方式和栈区的变量相同,先在其中找该数据,找到的话直接指向,否则创建。String str1="" 这种方式是在String pool中先找,没有的话创建,并由栈中变量Str1指向(引用)。
    str2是找到str1指向的内容,比较发现一致,让str2也指向。用new的方式:也是先在String pool中创建,并将其拷贝放在堆中。让变量指向堆中的拷贝。
    也就是说每次创建的对象都是在String pool中。只是new 出来的必须放在堆中,但其实只是pool中的拷贝而已。 
      

  11.   

    本质上就是你所说的,不过这是一部分而已。
    new的时候是先让它指向常量区的。但是请务必记住new是要在堆中的。所以这里采用了一种机制。当时用new方式创建对象的时候,先在常量区(实际上是常量区中专门处理String类型的string pool进行处理的)寻找或创建,并且让str3指向这个在string pool中的对象。由于Java本身的设计,紧接着,它会动态的将创建好的对象的拷贝放在堆中,原来是指向string pool中的,马上重新指向堆中的这份拷贝。
    也就是说分两步:
    第一步,先指向常量区对象。
    第二步,当常量区把考贝放入堆中的时候,重新指向堆中的拷贝。因为它必须遵守new出来即在堆中的原则。