`
alhawk
  • 浏览: 4251 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

关于“代码难道不是这么写的?”

 
阅读更多

我写了个测试程序。

 

import java.util.ArrayList;
import java.util.List;


public class TestFor {
	private static void m1(List list) {
		for(int i=0;i<10;i++)
		{ 
			Object ox = new Object();
		  
			list.add(ox);
		}
	}

	private static void m2(List list) {
		Object o = null;
		for(int i=0;i<10;i++)
		{ 
			o = new Object();
			
			list.add(o);
		}
	}


	public static void main(String[] args) {
		
		Object[] array = new Object[10];
		
		
		List list = new ArrayList();
		
		
		m2(list);
		
		m1(list);
	
		
		
	}



}
 

“代码难道不是这么写的?”的帖子里就是关心m1和m2哪个写法更优.


我反编译了上面的程序,由于我们实际只关心m1和m2,所以下面只贴出部分字节码


   private static void m2(List list)
    {
    //    0    0:aconst_null     
    //    1    1:astore_1        
    //    2    2:iconst_0        
    //    3    3:istore_2        
    //    4    4:goto            26
    //    5    7:new             #3   <Class Object>
    //    6   10:dup             
    //    7   11:invokespecial   #8   <Method void Object()>
    //    8   14:astore_1        
    //    9   15:aload_0         
    //   10   16:aload_1         
    //   11   17:invokeinterface #32  <Method boolean List.add(Object)>
    //   12   22:pop             
    //   13   23:iinc            2  1
    //   14   26:iload_2         
    //   15   27:bipush          10
    //   16   29:icmplt          7
    //   17   32:return          
    }

    private static void m1(List list)
    {
    //    0    0:iconst_0        
    //    1    1:istore_1        
    //    2    2:goto            24
    //    3    5:new             #3   <Class Object>
    //    4    8:dup             
    //    5    9:invokespecial   #8   <Method void Object()>
    //    6   12:astore_2        
    //    7   13:aload_0         
    //    8   14:aload_2         
    //    9   15:invokeinterface #32  <Method boolean List.add(Object)>
    //   10   20:pop             
    //   11   21:iinc            1  1
    //   12   24:iload_1         
    //   13   25:bipush          10
    //   14   27:icmplt          5
    //   15   30:return          
    }
 
对比上面两个方法,可以发现基本一样,就是计数器和对象引用的在变量表中交换了下位置。

如果非要分出个好坏,m2把变量定义在外面,并初始化为null,反而多了两个bytecode指令。


分享到:
评论
1 楼 mercyblitz 2010-07-28  
楼主真不错,呵呵,喜欢研究哦。

相关推荐

    11高级 2:刚刚提交的代码,发现写错了怎么办?.md

    高级 3:写错的不是最新的提交,而是倒数第二个? 学习时长: 6分32秒 14 高级 4:比错还错,想直接丢弃刚写的提交? 学习时长: 1分47秒 15 高级 5:想丢弃的也不是最新的提交? 学习时长: 5分44秒 16 高级 6:代码...

    15高级 6:代码已经 push 上去了才发现写错?(1).md

    高级 3:写错的不是最新的提交,而是倒数第二个? 学习时长: 6分32秒 14 高级 4:比错还错,想直接丢弃刚写的提交? 学习时长: 1分47秒 15 高级 5:想丢弃的也不是最新的提交? 学习时长: 5分44秒 16 高级 6:代码...

    读者写者问题java 代码

    在这里,我们将深入探讨Java中解决读者写者问题的策略,并分析提供的代码可能存在的一些问题。 读者写者问题的核心在于:读者不互斥,可以同时读取数据;但当有写者在写入数据时,必须独占资源,即不允许任何读者或...

    数据可视化大屏分析软件有哪些,无需写代码就可以分析吗?.docx

    三、数据可视化需要写代码吗? 目前,许多数据可视化大屏软件如酷屏、Power BI、Tableau Public和Google Analytics都提供了无需编码的界面,用户可以通过预设的模板和组件来构建和分析数据。这些工具降低了数据可视...

    好的程序员如何写代码

    以下是一些关于好的程序员写代码的特点和技巧: 1. **整洁规范**:好的程序员注重代码的视觉美感,空白和注释的布局都显得错落有致,遵循统一的命名和排版规范,使得代码易于阅读和理解。 2. **命名一致性**:他们...

    CANoe写bootloader上位机代码

    有朋友邮件问我如何用CANoe的CAPL读取S19...基于此,我愿和大家一起分享我以前写的代码,不是很完善,敬请大家见谅。有更优化的,请和我分享,谢谢! 我的邮箱:tianhua_ming@126.com 如果回复不是很及时,请谅解!

    myeclipse2017 jsp页面 在select里面写 导致后面代码不是彩色问题

    本案例聚焦于一个特定的问题:在MyEclipse 2017中,当在JSP页面中使用`&lt;c:if&gt;`标签时,导致其后面的代码显示颜色异常,即一半是黑色,一半是彩色。这个问题主要涉及到两个核心技术点:JSP和`&lt;c:if&gt;`标签。 首先,...

    写好代码的十个秘诀_微软中国研究院

    **写好代码的十个秘诀** 在编程领域,代码质量至关重要,因为它直接影响到软件的可读性、可维护性以及性能。微软中国研究院分享了“写好代码的十个秘诀”,旨在帮助开发者提升编码技能,实现更高效、更优雅的编程。...

    写好代码的十个秘诀

    以下是一些关于如何提升代码质量的关键要点: **鲁棒性**:代码应该能够处理预期之外的情况,如异常输入或边界条件。例如,函数`MyGirlFriendFunc`中的`CrntQtr`如果等于0,程序会崩溃,这违反了鲁棒性的原则。应...

    谁说不能在Word下写代码

    "谁说不能在Word下写代码"这一主题,就是一种打破常规的尝试。这里,通过WPS Word插件,开发者陈旭实现了在Word中编程的可能性。 这个插件的核心是集成Microsoft的命令行编译器cl.exe,这是一个C++编译器,通常在...

    模仿MessageBox的代码,写的不是那么标准,但是模仿出来了

    【标题】:“模仿MessageBox的代码实现” 在编程领域,经常需要与用户...在后续的学习中,建议关注代码风格的提升,同时深入理解Windows编程的核心原理,这样可以在实现功能的同时,也能写出高质量、易于维护的代码。

    表白代码,不是我写的,介于保存,效果还是可以的

    在IT行业中,编程不仅仅是关于逻辑和效率,有时候它也可以是一种表达情感的方式。在这个案例中,我们看到一个名为"表白代码"的项目,虽然并非作者原创,但其效果被评价为"还是可以的"。这个项目标签为"javascript",...

    怎样为arm写c代码

    在为ARM架构编写C代码时,你需要了解一些关键的概念和技术,因为ARM处理器...提供的文档《android开发板.doc》、《android开发.PDF》以及《怎样为arm写c代码.pdf》应该能进一步深化你的理解,帮助你在实践中解决问题。

    几个写代码的好习惯,对写好代码很用帮助

    以下是一些有助于写出更好代码的习惯: 1. **保持代码整洁与一致性**:遵循统一的代码风格和格式,例如,缩进、空格和命名约定。每个函数或方法应保持单一职责,避免过长的代码块。当需要添加新功能时,先考虑如何...

    CANoe写bootloader上位机代码.rar

    基于此,我愿和大家一起分享我以前写的代码,不是很完善,敬请大家见谅。有更优化的,请和我分享,谢谢! PS:和这个资源一样,只是原资源要50积分也太多了吧,一般用户根本下载不下来,所以我上传一个。

    写出高效率代码

    高效编程不仅仅是关于如何写出快速运行的代码,更重要的是如何合理利用系统资源,以及如何在性能和开发效率之间找到平衡点。通过以上提到的编码技术和编译优化技术,我们可以有效地提高VB代码的执行效率。此外,良好...

    12高级 3:写错的不是最新的提交,而是倒数第二个?(2).md

    高级 3:写错的不是最新的提交,而是倒数第二个? 学习时长: 6分32秒 14 高级 4:比错还错,想直接丢弃刚写的提交? 学习时长: 1分47秒 15 高级 5:想丢弃的也不是最新的提交? 学习时长: 5分44秒 16 高级 6:代码...

    07丨链表(下):如何轻松写出正确的链表代码?1

    【实践与技巧】写好链表代码需要时间和大量实践。投入时间反复练习,直到能够熟练编写无错误的代码,是提高技能的关键。同时,掌握以上提到的指针理解、避免指针丢失和使用哨兵节点的技巧,也能帮助我们更轻松地处理...

    代码能不能不要写得这么烂?!

    【代码风格与编程规范】 代码风格和编程规范是软件开发中的重要组成部分,它们不仅影响代码的可读性和可维护性,而且对团队合作和长期项目的成功有着深远影响。标题和描述中提到的情况揭示了一些常见的代码编写问题...

Global site tag (gtag.js) - Google Analytics