A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ReNeXt 中级黑马   /  2015-4-10 21:31  /  1138 人查看  /  17 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 ReNeXt 于 2015-4-10 21:32 编辑

第一种
String s;                           
while (!StdIn.isEmpty()) {        
    s = StdIn.readString();            
...                             
}   
第二种                          
while (!StdIn.isEmpty()) {  
String s = StdIn.readString();
...  
}
答:从效率角度说,两者没有区别。 但是第二种写法更好,因为它限制了变量的作用域。

17 个回复

倒序浏览
学习学习....
回复 使用道具 举报
真的是学习了,
回复 使用道具 举报
学习学习!
回复 使用道具 举报
这个。。。。String有没有重新声明呢 你测试下 Object创建也是比较重的操作
回复 使用道具 举报
学习学习。
回复 使用道具 举报
从效率来说,还是有一点区别的,s在while外定义一次,在while里面只是反复改变引用对象,而第二种则要反复定义和改变引用对象。其次,一般while循环得到结果一般要给外面的值引用,我觉得第一种好一点。s如果不是区域变量的话,没必要定义在里面。其次,s初始化的时候最好赋值,所以第一种最好这样写String s = null;
回复 使用道具 举报
ReNeXt 中级黑马 2015-4-12 14:13:11
8#
xlunaer 发表于 2015-4-11 13:41
从效率来说,还是有一点区别的,s在while外定义一次,在while里面只是反复改变引用对象,而第二种则要反复 ...

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

为什么初始化要赋值,不赋值不是也可由=以。
回复 使用道具 举报
lf027 中级黑马 2015-4-12 17:31:08
13#
感觉看蒙了,还有没更好的解释呢
回复 使用道具 举报
弯曲/mg抛物☀ 发表于 2015-4-12 16:05
为什么初始化要赋值,不赋值不是也可由=以。

如果对象初始化没有引用,假如在后面也没有引用就使用了这个对象就会出现无引用异常。编写程序时为每个对象初始化时建立引用是一个好习惯
回复 使用道具 举报
学习了。
回复 使用道具 举报
参考学习下。
回复 使用道具 举报
更加省内存了~一个变量该在什么时候存在,该存在多久,都需要考虑~
回复 使用道具 举报
一个意思,第二种的s 只是存在于while循环里面,而第一中的写法在while循环外声明,s的生命周期也常了。效率低
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马