黑马程序员技术交流社区

标题: 关于两种两种写法的效率? [打印本页]

作者: ReNeXt    时间: 2015-4-10 21:31
标题: 关于两种两种写法的效率?
本帖最后由 ReNeXt 于 2015-4-10 21:32 编辑

第一种
String s;                           
while (!StdIn.isEmpty()) {        
    s = StdIn.readString();            
...                             
}   
第二种                          
while (!StdIn.isEmpty()) {  
String s = StdIn.readString();
...  
}
答:从效率角度说,两者没有区别。 但是第二种写法更好,因为它限制了变量的作用域。
作者: z小怪兽    时间: 2015-4-10 21:46
学习学习....
作者: AndroidM    时间: 2015-4-10 21:56
真的是学习了,
作者: 黑夜中的太阳    时间: 2015-4-10 21:59
学习学习!
作者: sisel    时间: 2015-4-10 23:37
这个。。。。String有没有重新声明呢 你测试下 Object创建也是比较重的操作
作者: 怀念子龙    时间: 2015-4-11 09:24
学习学习。
作者: xlunaer    时间: 2015-4-11 13:41
从效率来说,还是有一点区别的,s在while外定义一次,在while里面只是反复改变引用对象,而第二种则要反复定义和改变引用对象。其次,一般while循环得到结果一般要给外面的值引用,我觉得第一种好一点。s如果不是区域变量的话,没必要定义在里面。其次,s初始化的时候最好赋值,所以第一种最好这样写String s = null;
作者: ReNeXt    时间: 2015-4-12 14:13
xlunaer 发表于 2015-4-11 13:41
从效率来说,还是有一点区别的,s在while外定义一次,在while里面只是反复改变引用对象,而第二种则要反复 ...

有道理。
作者: Zack    时间: 2015-4-12 15:10
个人认为,限制作用域即使定义在循环外也可以用关键字限制,而定义在循环内部,每次循环就要重新申请空间,虽然时间效率没有降低,但空间效率会很低
作者: xw_fting    时间: 2015-4-12 15:14
第二种的话,每次进去不就在内存中都重新声明变量么,不是效率低了?
作者: bankmycard    时间: 2015-4-12 15:27
这个要顶一下
作者: 弯曲/mg抛物☀    时间: 2015-4-12 16:05
xlunaer 发表于 2015-4-11 13:41
从效率来说,还是有一点区别的,s在while外定义一次,在while里面只是反复改变引用对象,而第二种则要反复 ...

为什么初始化要赋值,不赋值不是也可由=以。
作者: lf027    时间: 2015-4-12 17:31
感觉看蒙了,还有没更好的解释呢
作者: xlunaer    时间: 2015-4-12 17:32
弯曲/mg抛物☀ 发表于 2015-4-12 16:05
为什么初始化要赋值,不赋值不是也可由=以。

如果对象初始化没有引用,假如在后面也没有引用就使用了这个对象就会出现无引用异常。编写程序时为每个对象初始化时建立引用是一个好习惯
作者: 弯曲/mg抛物☀    时间: 2015-4-12 18:35
学习了。
作者: zhaoqiankun    时间: 2015-4-12 22:42
参考学习下。
作者: 黑色救护车    时间: 2015-4-12 22:49
更加省内存了~一个变量该在什么时候存在,该存在多久,都需要考虑~
作者: Teresa    时间: 2015-4-12 22:58
一个意思,第二种的s 只是存在于while循环里面,而第一中的写法在while循环外声明,s的生命周期也常了。效率低




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2