锁定老帖子 主题:在循环中临时变量定义成final的意义
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-07-06
for(int i=0;i<INFO_KEYS.length;i++){ final HSSFCell hsCell=hr.createCell(i); hsCell.setCellValue(infoMap.get(INFO_KEYS[i])); } 比起一般的写法: HSSFCell hsCell=null; for(int i=0;i<INFO_KEYS.length;i++){ hsCell=hr.createCell(i); hsCell.setCellValue(infoMap.get(INFO_KEYS[i])); } 大侠们能不能讲讲! 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-07-06
锁定单元格?
|
|
返回顶楼 | |
发表时间:2009-07-06
没意义。有的人就是喜欢用 final。
|
|
返回顶楼 | |
发表时间:2009-07-06
final 用来将变量和变量的初始值(对象)在变量的作用域内永久绑定,
不过在你的这个例子中 没什么意义 |
|
返回顶楼 | |
发表时间:2009-07-07
步行者 写道 final 用来将变量和变量的初始值(对象)在变量的作用域内永久绑定,
不过在你的这个例子中 没什么意义 能不能详细介绍一下,在什么情况下有意义? 我想主要是从内存来说有没有什么意义,占用的内存更多或是更少? |
|
返回顶楼 | |
发表时间:2009-07-07
iaimstar 写道 锁定单元格?
什么意思? |
|
返回顶楼 | |
发表时间:2009-07-08
luzl 写道 步行者 写道 final 用来将变量和变量的初始值(对象)在变量的作用域内永久绑定,
不过在你的这个例子中 没什么意义 能不能详细介绍一下,在什么情况下有意义? 我想主要是从内存来说有没有什么意义,占用的内存更多或是更少? 内存?没什么关系。 要说关系的话。final变量地址存储在只读存储器中,对象的引用不可修改,而值还是可以改变的,除非你这个是基本类型或者String |
|
返回顶楼 | |
发表时间:2009-07-08
final用来修饰变量,意义是什么?
|
|
返回顶楼 | |
发表时间:2009-07-08
star022 写道 final用来修饰变量,意义是什么?
如果变量是引用变量,就是改变量指向的地址不可以修改,但是可以修改指向对象的属性 如果变量是基本变量,就是值不可以修改。 总之final是赋值一次,就不可以修改变量的值,只读的意思。 这里使用final没有任何意义。 |
|
返回顶楼 | |
发表时间:2009-07-08
luzl 写道 循环体内的变量定义成final有什么意义:
for(int i=0;i<INFO_KEYS.length;i++){ final HSSFCell hsCell=hr.createCell(i); hsCell.setCellValue(infoMap.get(INFO_KEYS[i])); } 比起一般的写法: HSSFCell hsCell=null; for(int i=0;i<INFO_KEYS.length;i++){ hsCell=hr.createCell(i); hsCell.setCellValue(infoMap.get(INFO_KEYS[i])); } 大侠们能不能讲讲! 可能原作者担心别人这么用吧 HSSFCell hsCell=null; for(int i=0;i<INFO_KEYS.length;i++){ hsCell=hr.createCell(i); hsCell.setCellValue(infoMap.get(INFO_KEYS[i])); hsCell=hr.createCell(i); //replace the previous cell //Do something unexpected... } 主要是防止不预期的编码, 如果出现不预期的编码,那么在编译期就会出错。 比如有人这么编码 @Test public void testTaskService(){ task.setId(2); new TestFinal().doTask(task); org.junit.Assert.assertEquals(task.getId(), 2); } class TestFinal{ public void doTask(Task task){ //the following is the invalid coding task = new Task(); task.setId(1); } } 假如在加上final就能防止这种无效编码,比如 @Test public void testTaskService(){ task.setId(2); new TestFinal().doTask(task); org.junit.Assert.assertEquals(task.getId(), 2); } class TestFinal{ public void doTask(final Task task){ //You will get an error when you try to get the source code compiled task = new Task(); task.setId(1); } } 此外还有比较常见的final instance variable, 主要防止在开发过程中,以及维护过程中,某个方法可能把这个variable替换掉,导致非预期结果。 请指正... |
|
返回顶楼 | |