“A=A+B;”,说明同上,此处创建了一个对象,并由引用A来引用,那么原来A所指向的对象就成为垃圾对象,被回收; StringBuffer D= new StringBuffer("abc")", StringBuffer的特点是改变对象本身而不是创建新的对象,因此,此处及“D= D.append("567");”都是对同一个对象进行处理。而字符串对象也是一个对象,故有...
整个过程,一共涉及到6个对象,其中5个是String对象。一共创建了4个String对象
一个 因为"a","b","c","d"都是常量,所以在编译期就可以确定a的值,这句话等价于:String a= "abcd";在编译期会首先在常量池里找有没有"abcd"这个常量,没有的话就分配一个,所以这里就创建了一个对象,并没有在堆中创建对象。楼上的说等价于String a = new String(A);这是不准确的...
紧接着这段代码之后的往往是这个问题,那就是这行代码究竟创建了几个String对象呢?相信大家对这道题并不陌生,答案也是众所周知的,2个。接下来我们就从这道题展开,一起回顾一下与创建String对象相关的一些JAVA知识。我们可以把上面这行代码分成String str、=、"abc"和new String()四部分来看待。String str只是...
String s="a"+"b"+"c";如果你比较一下Java源代码和反编译后的字节码文件,就可以直观的看到答案,只创建了一个String对象。估计大家会有疑问了,为什么源代码中字符串拼接的操作,在编译完成后会消失,直接呈现为一个拼接后的完整字符串呢?这是因为在编译期间,应用了编译器优化中一种被称为常量折叠(Constant...
int a :int是八种基本数据类型,存储在栈中,所以不算新建对象了。 String b: 算是一个,创建的对象放入堆中的常量池了。 String c:引用b之前在常量池中创建过的内容了,不算是新建了对象 String[] d: 创建了两个对象,因为“welcome to casic”之前在常量池中创建过了,无需再次创建 ...
题目中的代码被编译器在编译时优化后,相当于直接定义了一个”abcd”的字符串,所以,题目答案应该只创建了一个String对象。 程序最后一条打印语句的结果应该为true。
1, String s="a"+"b"+"c"+"d"创建了几个对象(假设之前串池是空的)2,StringBuilder sb = ...
1.这条语句String s="a"+"b"+"c"+"d";一共创建了多少个对象() A.1 B.4 C.6 D.7 这道题放在了第一题 没动脑子数了数 感觉是八个 但是没有选项 又数了数 难道是五个 还是没有选项 然后我就选了B... 纯属瞎写了(主要是谁没事这么声明变量啊) ...
因为a是上面static String a= "a";定义的,在执行String s="a"+"b"+"c"+"d"时,不会再创建这个对象了。所以是3个。