在for循环中声明变量的优点和缺点是什么?我想改变我的讲师思想,或改变我的思想:讲师强迫我使用:
// Declare variables
int i;
...
for(i = 0; boolen expesion; update) // Note i not declared here
Run Code Online (Sandbox Code Playgroud)
我喜欢做:
for(int i = 0; boolean expesion; update) // Note i is declared here
Run Code Online (Sandbox Code Playgroud)
在考试中,这是我的方式的惩罚点..我试图通过告诉他说服他:
他的答案是:"如果这里有很少的循环,你不需要反复宣布同一个变量".很难与讲师一起争论那么特别是你是一个来自foreng国家的一年级学生.但是int没有占用那么多内存加上java有一个垃圾收集器来清理内存..
所以,请帮助我说服他或我,并提出一个很好的论据.
这似乎是一个简单的问题,但对我来说并不直观.
假设你有一个这样的循环:
int i;
for(i=0;i<10;i++){
float b = 25.2;
float c;
c=b+i;
}
Run Code Online (Sandbox Code Playgroud)
在每个循环中将b定义为float是否会产生任何负面影响?我认为它会有,但我不太确定,因为我看到的代码适用于此...
谢谢...
我的java应用程序的内存使用有问题.具有堆空间和非堆空间.现在我专注于我的堆空间.
我的应用程序是一个SocketServer,它通过DataInputStream获取Input.我正在读取信息作为字节数组.我每秒得到一个不规则的输入量,但我们说的是每秒400字节到1.000字节的空间,峰值可以更高.
由于我的程序是一个服务器,它在无限循环中等待输入.现在我遇到了问题,我的堆空间随着时间的推移而攀升,所有5-10分钟它会上升0.5MB.
我使用了多个监视器应用程序,如jconsole和YourProfiler.之后,我试图在Heap Dumps的帮助下弄清楚,我用jmap进行了解析并使用Eclipse Memory Analyzer进行分析.
现在我的问题是,在这个示例代码中,哪个选项更好或更少使用更少的堆空间1或2?
选项1:
while (true){
byte [] one= new byte [21];
do something with one;
byte [] two= new byte [50];
do something with two;
byte [] three= new byte [30];
do something with three;
}
Run Code Online (Sandbox Code Playgroud)
选项2:
byte [] one;
byte [] two;
byte [] three;
while (true){
one= new byte [21];
do something with one;
two= new byte [50];
do something with two;
three= new byte [30];
do something with three;
}
Run Code Online (Sandbox Code Playgroud)
我不知道在循环中创建的三个对象会发生什么.这些应该是局部变量,只能在循环中可见和访问.但是在一个循环圈之后,JVM会删除它们并在下一个循环中创建一个新循环.所以我猜应该没有内存泄漏? …
这两种声明之间的区别在哪里String s:
1)
public static void main(String[] args) {
String s;
for (int i = 0; i < 1000000; i++) {
s = "String" + i;
System.out.println(s);
}
}
Run Code Online (Sandbox Code Playgroud)
2)
public static void main(String[] args) {
for (int i = 0; i < 1000000; i++) {
String s = "String" + i;
System.out.println(s);
}
}
Run Code Online (Sandbox Code Playgroud)
我的任务经理说第一个不需要CPU和第二个.那么Java以两种不同的方式编译这两个样本?但是怎么样.
谢谢您的帮助!