比如
public class TestFor { public static void main(String[] args) { // No.1
int x = 0;
for (int i = 0; i < 10; i++) {
System.out.println(x++);
} // No.2
for (int i = 0; i < 10; i++) {
int y = i;
System.out.println(y++);
}
}
}No.2中每次进入都会定义一个y,内存不是浪费了吗?
请指教
public class TestFor { public static void main(String[] args) { // No.1
int x = 0;
for (int i = 0; i < 10; i++) {
System.out.println(x++);
} // No.2
for (int i = 0; i < 10; i++) {
int y = i;
System.out.println(y++);
}
}
}No.2中每次进入都会定义一个y,内存不是浪费了吗?
请指教
public class X { public static void main(String[] args) throws ParseException {
int x = 1;
for (int i =0; i< 3; i++){
int x = 2;
}
}
}
for 块里面的 x的生命周期只有在for里面吧
iload_
istore
指令,照理说多执行两条指令稍微慢点,这代码主要的看可读性的了
没必要,因为每个y都是新的,而且数字不能为空。至于会不会占内存,可以负责任的说,不会。因为基本类型是存在栈里面的,随着对象作用域结束就消失了。
如果是new出来的变量,就肯定会占内存。即使失去了引用,对象都在那里,不来不去。直到垃圾回收。
y = i;
System.out.println(y++);
}
除非你new的那个对象是一直不变的,不然还是用第一种方法吧,减小作用域,能更好的GC
而真正new对象是在赋值符号后面部,这部分对象怎么创建出来是由程序逻辑决定的吧
大部分人瞎掰