题
编辑这个问题,因为我的不好的例子..这里是我最新的问题:
将下面是平等的速度和存储器中分配:
int b;
for (int i = 0; i < 1000; i++)
b = i;
和
for (int i = 0; i < 1000; i++)
int b = i;
解决方案
没有,就不会
在你有一个变量第一种情况下被分配1000个不同的价值观 - 你最终能够获得最后的值(999)构造函数完成后持有
在第二种情况下你拨打的基本上无操作方法1000倍。第二种方法没有副作用,也没有返回值,所以它也没用。局部变量仅“存在”为方法调用的持续时间,而在第一个例子中的实例变量是对象的一部分,因此将生活在
请注意,这并不限定于图元 - 的任何其他类型将行为相同的方式太
其他提示
- 是的。他们两个都完全无用的。
- 没有。实例尺1级是较大的比例大小的2级,由于要件可变的。
答案取决于你是什么意思说的是"平等"=)
没有.
- 在
Class1
变量a
是的一个领域,可通过所有方法的类。 - 在
Class2
这是不是这样的情况:a
是一个本地内的变量的方法assign
.后assign
完成,值a
被丢弃。
没有,一个具有一个实例变量a
(1类),和一个也没有。
在第一种情况下,你已经宣布B中一个int每一次它的值更新循环执行。在第二个,b为声明和初始化为i的每个时间的值的循环的执行。我不是100%肯定,但我认为,第二种情况是更多的内存密集型的,但我不认为速度差别是明显的。
这是值得注意的,任何编译器称职的,我坚信JIT是值得很多盐,只是会在第二种情况下预留空间“B”一次,即在“声明”阶段将是毫无意义
您是否尝试过这一点?它甚至没有编译!
for (int i = 0; i < 1000; i++)
int b = i;
来自编译器的错误消息:
Example.java:4: '.class' expected
int b = i;
^
Example.java:4: not a statement
int b = i;
^
Example.java:4: illegal start of expression
int b = i;
^
一个循环体必须包含至少一个语句。变量声明是不是一个语句,所以只需变量声明一个循环是无效的。
不隶属于 StackOverflow