public static void main(String[] args) {
List<String>
list =
new ArrayList<>();
list.add(
"1");
change(
list);
System.out.println(
list.get(
0));
}
public static void change(
List list) {
List<String> newList =
new ArrayList<>();
newList.add(
"2");
list = newList;
}
我被这段代码忽悠了(╥╯^╰╥) 毫不犹豫的说输出结果是2! 。。。。。。。。。。。。。 刚给面试官说过方法是怎么封装成栈帧的,结果就自己啪啪打自己脸。 事实上,那两个list全都是局部变量,每个栈帧之间是彼此隔离的,方法出栈之后,什么局部变量表、参数表就都消失了,跟他后面的栈帧(调用者)有鸡毛关系啊……….. 结果应该是1 !
public void print(){
.....
一堆代码
.....
String s
= new String(
"123");
.....
一堆代码
.....
}
问String s = new String(“123”)这句话创建了几个string对象? 在这之前面试官啪啪啪给我讲了一堆关于运行时常量池的定义,凡是用引号引起来的字符串都属于字符串常量,会被放在运行时常量池里。这样一来,结果很明显应该是两个string对象,常量池一个,外面一个,当然这两个都在堆中。 可惜,答案应该是一个或两个,因为”123”这个字符串可能在前面那一堆未知代码中出现过…….
转载请注明原文地址: https://ju.6miu.com/read-15794.html