编辑这个问题,因为我的不好的例子..这里是我最新的问题:

将下面是平等的速度和存储器中分配:

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;
                          ^

一个循环体必须包含至少一个语句。变量声明是不是一个语句,所以只需变量声明一个循环是无效的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top