1.String a="b",Stirng b="b";创建了几个对象??
2.String a=new String("a"+"b");创建了几个对象??
判断的规律是什么??菜鸟求解释!!!http://zhidao.baidu.com/question/213275087.html

解决方案 »

  1.   

    String a="b" 创建了一个对象"b",Stirng b="b",在栈中找到"b",不创建对象。这里是1个对象。
    如果开始存在"b",不创建对象。0个对象。
    String a=new String("a"+"b");
    new 会在堆中开辟一块内存,算是创建对象 a(一个名字,引用算不算对象呢?)然后去栈中找有没有"ab",如果没有在字符串pool创建"ab",如果有不创建。所以应该是1-2个对象。
      

  2.   

    1、共创建了两个对象,分别为常量池中的,a与b
    2、在上面的基础上新创建了两个对象:堆区的new String 和常量池中字符串ab:
    解释:String通常为人们称之为不变模式,字符串常量都放在内存的池区,供反复利用,1中声明变量时之间将变量的引用指向了池中的两个常量:a和b,如果池中没有a和b那么就要创建两个对象,2则是通过创建堆区对象的形式指向了池中的常量ab,两个字符串拼接成新串,2中的声明方式相当与引用指向了堆区的new String对象,而堆区的对象又指向了池中的常量ab
      

  3.   

    看错了,1只创建了常量b,共4个:a  b   ab   和堆区的new String
      

  4.   

    看错了,1只创建了常量b,共4个:a  b   ab   和堆区的new String
      

  5.   

    我的看法:
     1,首先创建a,b两个引用对象,"b"为常量,常量池找不到就创建,但是不能归为对象,所以是两个
      2.a 一个引用对象,new String 一个,共两个对象,"ab"为常量,同上常量池中找不到则创建,所以也是两个
      

  6.   

    String是个特例 它作为汇编中的基础数据类型在创建时会多出一个
    String一直就是处于基础数据类型和引用型之间的"怪胎"
      

  7.   

    看这个吧:http://www.iteye.com/topic/774673此文章作者就是开发jvm的,没有人比他更清楚了
      

  8.   


    的确,RednaxelaFX从字节码分析,深入浅出的剖析了这个问题,并且举一反三,学习了。
      

  9.   

    第一个问题是创建了一个对象,字符常量存在于datasgment中,不是在栈和堆空间中。当第一个String a="b"执行时。datasgment中就会有个空间里包含“b”,第二个String b="b"只会用引用指向第一个创建"b"的位置。
    第二个问题也只是创建了一个对象,栈空间指向堆空间的对象。+号时字符串连接符。
      

  10.   

    String a = "b";
    这个大概的意思是,现在字符串常量池中寻找"b",如果找到了,就把地址赋值给引用a,如果没找到则在字符串常量池中建立常量"b",然后再把常量"b"的地址给引用a;
    所以1.String a="b",Stirng b="b";创建了几个对象??可能最多建立一个"b"的字符串常量,和2个引用
    2.String a=new String("a"+"b");创建了几个对象??最多可能建立3个字符串常量"a","b", "ab",然后会在堆里面建立一个对象“ab”,然后把堆中的对象引用赋值给a
     
      

  11.   


    1.String a="b",Stirng b="b";创建了几个对象??
    在常量池中,只创建一个"b",这样解释了a==b,结果是true
    2.String a=new String("a"+"b");创建了几个对象??
    首先"a" + "b",先在常量池中创建"a", "b"两个对象,然后"ab" = "a" + "b","ab"是第三个对象,最后使用
    new在堆上创建"ab",这是第四个
      

  12.   

    ???怎么在常量池中创建了“ab”常量,又在堆中用new又创建了“ab”?????
      

  13.   

    1,String a="b",Stirng b="b";创建了几个对象??堆内有一块区域我们称之为字符串缓冲区,String a ="b"去堆内的字符串缓冲区找,是否存在"b"没有就建立"b"然后存储进缓冲区,当到String b = "b";因为缓冲区内已经有了"b"便不再创建.
    2.String a=new String("a"+"b");创建了几个对象??
    先在堆内建立1个,然后再去字符串缓冲区存储"ab"
    String a = new String ("a"+"b"); +字符串连接符,通过JVM自动转成"ab"
    堆和字符串缓冲区有什么关系呢?堆是分区域执行操作的,堆内为其开辟了空间,String a = new String ("a"+"b"); 会先在堆内new 出对象,然后把"ab"拿到缓冲区再做比对,如果无这个字符串, 便创建并且存储,那么答案显而易见了,