1.String a="b",Stirng b="b";创建了几个对象??
2.String a=new String("a"+"b");创建了几个对象??
判断的规律是什么??菜鸟求解释!!!http://zhidao.baidu.com/question/213275087.html
2.String a=new String("a"+"b");创建了几个对象??
判断的规律是什么??菜鸟求解释!!!http://zhidao.baidu.com/question/213275087.html
如果开始存在"b",不创建对象。0个对象。
String a=new String("a"+"b");
new 会在堆中开辟一块内存,算是创建对象 a(一个名字,引用算不算对象呢?)然后去栈中找有没有"ab",如果没有在字符串pool创建"ab",如果有不创建。所以应该是1-2个对象。
2、在上面的基础上新创建了两个对象:堆区的new String 和常量池中字符串ab:
解释:String通常为人们称之为不变模式,字符串常量都放在内存的池区,供反复利用,1中声明变量时之间将变量的引用指向了池中的两个常量:a和b,如果池中没有a和b那么就要创建两个对象,2则是通过创建堆区对象的形式指向了池中的常量ab,两个字符串拼接成新串,2中的声明方式相当与引用指向了堆区的new String对象,而堆区的对象又指向了池中的常量ab
1,首先创建a,b两个引用对象,"b"为常量,常量池找不到就创建,但是不能归为对象,所以是两个
2.a 一个引用对象,new String 一个,共两个对象,"ab"为常量,同上常量池中找不到则创建,所以也是两个
String一直就是处于基础数据类型和引用型之间的"怪胎"
的确,RednaxelaFX从字节码分析,深入浅出的剖析了这个问题,并且举一反三,学习了。
第二个问题也只是创建了一个对象,栈空间指向堆空间的对象。+号时字符串连接符。
这个大概的意思是,现在字符串常量池中寻找"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
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",这是第四个
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"拿到缓冲区再做比对,如果无这个字符串, 便创建并且存储,那么答案显而易见了,