java 中 String str = \ 若这些字符串都是第一次出现,且java编译器,虚拟机都没有做优化的话,那么应该是4个对象,分别是a,b,c,ab,abc 原因是String 对象是final修饰的也就是说,只能新建,不能修改,所以肯定得有5个对象。不过高版本的java编译器,或虚拟机都是有做优化的,那时候就不一定了。在不优化的情况下,肯定是StringBuilder更优,原因就是创建对象的开销是很大的。StringBuilder.append操作是不需要创建新对象的,ab,abc就不存在了,随着+号的增加,性能差异会越来越明显。
共创建了多少个对象:String s=\ 第一条语句打印的结果为false,第二条语句打印的结果为true,这说明javac编译可以对字符串常量直接相加的表达式进行优化,不必要等到运行期去进行加法运算处理,而是在编译时去掉其中的加号,直接将其编译成一个这些常量相连的结果。题目中的第一行代码被编译器在编译时优化后,相当于直接定义了一个”abcd”的字符串,所以,上面的代码应该只创建了一个String对象。写如下两行代码,String s=a+b+c+d;System.out.println(s=abcd);最终打印的结果应该为true。
String a=\ 字符串常量池:http:// droidyue.com/blog/2014/ 12/21/string-literal-pool-in-java/ 字符串拼接内部实现:。
String s = new String (\
JAVA:string temp= a + b + c ;共创建几个string对象? 5个吧!a,b,c本来就是3个对象!因为string是不可变的!所以会分配个别的内存存放a+b。然后在有这个内存和c放在一个新分配的内存中!
共14 littleboy1994 LV.1 2020-05-30 关注 String s=\"a\"+\"b\"+\"c\"创建了0个或1个对象。以String s=\"abc\"这种形式创建的字符串语句是存储在常量池中的,所以该语句赋值。
java小问题。。中String a=“a”+\ 一个因为\"a\",\"b\",\"c\",\"d\"都是常量,所以在编译期就可以确定a的值,这句话等价于:String a=\"abcd;在编译期会首先在常量池里找有没有\"abcd\"这个常量,没有的话就分配一个,所以这里就创建了一个对象,并没有在堆中创建对象。楼上的说等价于String a=new String(A);这是不准确的,因为new String()的话会在堆中分配内存空间,而这里显然没有在堆中分配空间。
String s=\ 像这样String a=\"ab\"+\"cd;ab\"和\"cd\"分别创建了一个对象,它们经过“+”连接后又创建了一个对象\"abcd\",因此一共三个,并且它们都被保存在 字符串池 里了。所以您的问题是创建了三个对象
string a=new string(b+c) 创建了几个对象 3 个“b”“c”“bc”
String s=\ 一共五个,其中四个是临时变量很快就被会垃圾回收。内存分配地址一:用来存“a”对象内存分配地址二:用来存“b”对象内存分配地址三:用来存“a”+\"b\"的临时结果。内存分配地址四:用来存\"c内存分配地址五:用来存\"a+b\"+“c”String s 是对象名,但它并不真正分配地址,只分配了引用,引用(相当于指针指向,在内存中只是一个数字,指向“五”的位置),所以S只是名字而己,并不具备真实的内存分配。就好像,一个人己经存在,名字只是名字,不是人本身:举个例子,现在有a,b,c 三个人。我们至少得为a,b,c三个人分配内存空间来存放这三个对象,这是没有疑问的。现在 a和b 想联合起来成立一个班集体,所以我们需要修建一个新的内存(班集体)来定义这两个人的存在。然后C决定创建一个更大的集体,把a,b都召进来,所以内存中需要开创一块更大的内存来能同时存下这三个人。最后,这个最大的集体生成后,我们需要给它取个好听的名字,就叫S吧。但S只是一个名字,没有必要给他分配一间教室。最后,BS一下那些叫一个的同学,哈哈,怎么也不可能是一个对象,哈你说四个的话还有可能靠边了。