哥们今天去公司的笔试题 是这个问题
但是没有答对,所以去网上搜了一下 但是结果回答的各种各样 求权威答案啊 谢谢。。
==============下面是我搜到的一些答案=========不知道哪个对啊========
NO1.(我看不懂这个答案什么意思)
下面这条语句一共创建了多少个对象:String s="a"+"b"+"c"+"d";
答:对于如下代码:
String s1 = "a";
String s2 = s1 + "b";
String s3 = "a" + "b";
System.out.println(s2 == "ab");
System.out.println(s3 == "ab");
第一条语句打印的结果为false,第二条语句打印的结果为true,这说明javac编译可以对字符串常量直接相加的表达式进行优化,不必要等到运行期去进行加法运算处理,而是在编译时去掉其中的加号,直接将其编译成一个这些常量相连的结果。
题目中的第一行代码被编译器在编译时优化后,相当于直接定义了一个”abcd”的字符串,所以,上面的代码应该只创建了一个String对象。写如下两行代码,
String s = "a" + "b" + "c" + "d";
System.out.println(s == "abcd");
最终打印的结果应该为true。 N02.
一共9个对象 java中String 每个引号都是一个对象 这就是5个了
"a"+"b"=ab一个
"ab"+"c"=abc
"abc"+"d"=abcd
"abcd"+"e"=abcde
这又是4个一共有9个虽然s只是指向最后一个 但是实际上产生了9个对象N03.
这不误人子弟嘛,就两个对象,对于基本类型在编译期就确定了值,在字符串池中就一个对象“abcde”,这行代码相当于string s = "abcde";所以一共创建了2个对象
但是没有答对,所以去网上搜了一下 但是结果回答的各种各样 求权威答案啊 谢谢。。
==============下面是我搜到的一些答案=========不知道哪个对啊========
NO1.(我看不懂这个答案什么意思)
下面这条语句一共创建了多少个对象:String s="a"+"b"+"c"+"d";
答:对于如下代码:
String s1 = "a";
String s2 = s1 + "b";
String s3 = "a" + "b";
System.out.println(s2 == "ab");
System.out.println(s3 == "ab");
第一条语句打印的结果为false,第二条语句打印的结果为true,这说明javac编译可以对字符串常量直接相加的表达式进行优化,不必要等到运行期去进行加法运算处理,而是在编译时去掉其中的加号,直接将其编译成一个这些常量相连的结果。
题目中的第一行代码被编译器在编译时优化后,相当于直接定义了一个”abcd”的字符串,所以,上面的代码应该只创建了一个String对象。写如下两行代码,
String s = "a" + "b" + "c" + "d";
System.out.println(s == "abcd");
最终打印的结果应该为true。 N02.
一共9个对象 java中String 每个引号都是一个对象 这就是5个了
"a"+"b"=ab一个
"ab"+"c"=abc
"abc"+"d"=abcd
"abcd"+"e"=abcde
这又是4个一共有9个虽然s只是指向最后一个 但是实际上产生了9个对象N03.
这不误人子弟嘛,就两个对象,对于基本类型在编译期就确定了值,在字符串池中就一个对象“abcde”,这行代码相当于string s = "abcde";所以一共创建了2个对象
解决方案 »
- [求助]什么时候使用静态方法,要注意什么问题
- 谁有JAR格式的thinking in java?发个给我吧,没事时想在手机上也能看
- 北京一家公司的题,谁看完谁哭~求高手~超级撒分
- 如何关闭打开的所有interframe或者选种的一个
- 请教一下java中怎么分隔字段,怎样实现顺序读取啊?
- !!!!静态方法,内部类问题!!!!!
- 大家注意了没有,在swing类库中,大部分组件都实现了Accessible这个接口,请问该接口是做什么的?
- 怎么才能让Swing中的类的显示效果达到windos的水平?
- Jbutton添加图片的问题 请帮我看下为什么我运行了图片还是没有显示出来呢?
- 用java通过REST方式连接Gremlin问题
- 新手请教,我重写了Comparable类中的compareTo()这个方法,为什么不能用。
- insert '}' to complete classbody问题!
public static void main(String[] args) {
String s="a"+"b"+"c"+"d";
}
}
反编译class的ByteCode
// Compiled from OneString.java (version 1.6 : 50.0, super bit)
public class OneString {
// Method descriptor #6 ()V
// Stack: 1, Locals: 1
public OneString();
0 aload_0 [this]
1 invokespecial java.lang.Object() [8]
4 return
Line numbers:
[pc: 0, line: 1]
Local variable table:
[pc: 0, pc: 5] local: this index: 0 type: OneString
// Method descriptor #15 ([Ljava/lang/String;)V
// Stack: 1, Locals: 2
public static void main(java.lang.String[] args);
0 ldc <String "abcd"> [16]