对象的创建

问题描述

object obj = null; --1 obj = new object(); object obj_1 = new object(); --2 帮我介绍下着两种的区别;我遍历时老是创建对象,遍历的次数挺多的,上述两种方法哪种更加节约资源!

解决方案

转载:Java代码  for (int i = 0; i < 10000; ++i) {  Object obj = new Object();  System.out.println("obj= " + obj);  }  上面的做法会浪费较大的内存空间。正确的做法如下所示:  Java代码  Object obj = null;  for (int i = 0; i < 10000; ++i) {  obj = new Object();  System.out.println("obj= "+ obj);  }  采用上面的第二种编写方式,仅在内存中保存一份对该对象的引用,而不像上面的第一种编写方式中代码会在内存中产生大量的对象引用,浪费大量的内存空间,而且增大了垃圾回收的负荷。因此在循环体中声明创建对象的编写方式应该尽量避免。
解决方案二:
理论上第一种必然要好一点。不过个人感觉两种做法差不多,可能要看你循环的次数吧。引用相比于对象要小很多,就是个零头,引用是在栈里,而对象是在堆里。大家平时都说避免在循环体中创建对象,因为创建对象的消耗比较大。
解决方案三:
直接上字节码1、 Object o1 = new Object(); 0: new #2; //class java/lang/Object 3: dup 4: invokespecial #1; //Method java/lang/Object."<init>":()V 7: astore_12、 Object o1 = null; o1 = new Object(); 0: aconst_null //会先存个null 1: astore_1 2: new #2; //class java/lang/Object 5: dup 6: invokespecial #1; //Method java/lang/Object."<init>":()V 9: astore_1 10: return使用上的问题,别纠结。1、@kayban 说的情况;
解决方案四:
object obj = null; --1 obj = new object(); 这种代码比较好点,节省空间
解决方案五:
object obj = null; --1 obj = new object();

时间: 2024-09-20 00:05:42

对象的创建的相关文章

MFC教程(5)-- MFC对象的创建(1)

MFC对象的创建 前面几章介绍了MFC的核心概念和思想,即介绍了MFC对Windows对象的封装方法和特点:MFC对象的动态创建.序列化:MFC消息映射机制. 现在,考查MFC的应用程序结构体系,即以文档-视为核心的编程模式.学习本章,应该弄清楚以下问题: MFC中诸多MFC对象的关系:应用程序对象,文档对象,边框窗口对象,文档边框窗口对象,视对象,文档模板对象等. MFC对象的创建和销毁:由什么对象创建或销毁什么对象,何时创建,何时销毁? MFC提供了那些接口来支持其编程模式? MFC对象的关

对象的创建和存在时间

从技术角度说,OOP(面向对象程序设计)只是涉及抽象的数据类型.继承以及多形性,但另一些问题也可能显得非常重要.本节将就这些问题进行探讨. 最重要的问题之一是对象的创建及破坏方式.对象需要的数据位于哪儿,如何控制对象的"存在时间"呢?针对这个问题,解决的方案是各异其趣的.C++认为程序的执行效率是最重要的一个问题,所以它允许程序员作出选择.为获得最快的运行速度,存储以及存在时间可在编写程序时决定,只需将对象放置在堆栈(有时也叫作自动或定域变量)或者静态存储区域即可.这样便为存储空间的分

MFC教程(5)-- MFC对象的创建(2)

从这些图中可以看到何时.何处调用了什么消息处理函数和虚拟函数,这些函数用来作了什么事情.必要的话,程序员可以在派生类覆盖它们. 在创建工作完成之后,进行初始化,使用文档对象的数据来更新视和显示窗口. 至此,本节描述了MFC的SDI程序从分析命令行到创建或打开文件的处理过程,文档对象已经动态创建.总结如下: 命令行分析→应用程序的FileNew→文档模板的OpenDocumentFile(NULL)→文档的OnNewDocument 命令行分析→应用程序的FileOPen→文档模板的OpenDoc

内核对象的创建和使用

1.进程内核对象句柄表 2.创建与关闭内核对象 3.进程间内核对象句柄的共享     1.进程内核对象句柄表 当一个进程初始化时,系统会为它分配一张内核对象句柄表.这个表只用于管理内核对象句柄.GDI和用户对象不会影响到这张表.表中的每一项有4个域.  即句柄ID,对象内存地址,访问屏蔽位,标志位.   当一个进程初始化时,句柄表为空. 现在假设你调用CreateFile函数创建一个文件对象,内核首先会查找当前进程中的句柄表,将一个空的表项取出来,并分配一个内核对象,将该对象的地址写入第二个域(

内部类对象创建是否依赖外围类对象的创建

问题描述 今天看到<ThinkinginJava>有关于内部类对象的一些特性的总结时遇到一个问题:P205上说:创建内部类对象的时刻不依赖于外围类对象的创建.但是书上也有说内部类对象的创建必须依赖于外围类对象,在拥有外部=围类对象之前是不可以创建内部类对象的.那么,当你在创建内部类对象的时刻之前外部类对象如果没有被创建呢?这句话还成立么? 解决方案 解决方案二:看你是不是静态内部类了解决方案三:静态内部类是嵌套类,我说的是内部类.

viratualbox-安装virtualbox之后,不能打开,出现提示严重错误:com对象无法创建。

问题描述 安装virtualbox之后,不能打开,出现提示严重错误:com对象无法创建. 不会插图片. 错误明细是: RC:E_NOINTERFACE (0x80004002) 电脑系统是win7,原来也装过virtualbox,然后因为新建的虚拟机无法导入于是换了一个版本安装,然后现在连virtualbox也打不开了.网上搜索有说是win7兼容问题,换别的兼容运行还是起不来,求教具体的解决方法,谢谢! 解决方案 系统它有问题吧,跟vb冲突了

转 cocos2d-x 3.0 常用对象的创建方式

cocos2d-x 3.0 中所有对象几乎都可以用create函数来创建,其他的创建方式也是有create函数衍生. 下面来介绍下create函数创建一般对象的方法,省得开发中经常忘记啥的. 1.精灵Sprite的4种创建方式 (1)根据图片资源路径来创建 ? 1 2 3 4 //根据图片路径来创建 auto sprite1 = Sprite::create(filepath); //根据图片路径来创建,并设置要显示的图片大小 auto sprite2 = Sprite::create(file

国航OA项目技术总结(二)关于JVM虚拟机中对象的创建,手机端提速的重要优化

由于JVM虚拟机对对象的销毁,程序员是不知道的:而且手机的配置肯定不如PC机,就算PC机里程序运行得多顺畅,手机里的运行速率还是不敢保证. 针对对象的问题,尽量将一次能创建的对象只创建一次: 比如中文都得这样写: public static final String TRACE = "流程跟踪";//√ public static final String TITLE = "标题:";//√ public static final String DRAFTER =&

JVM源码分析之Java对象的创建过程

本文将基于HotSpot实现对Java对象的创建过程进行深入分析. 定义两个简单的类AAA和BBB 通过"javap -c AAA"`查看编译之后的字节码,具体如下: Java中的new关键字对应jvm中的new指令,定义在InterpreterRuntime类中,实现如下: new指令的实现过程: 1.其中pool是AAA的constant pool,此时AAA的class已经加载到虚拟机中,new指令后面的#2表示BBB类全限定名的符号引用在constant pool的位置: 2.

浅谈JavaScript对象的创建方式_javascript技巧

通过Object构造函数或对象字面量创建对象时,使用同一个接口创建很多对象时,会产生大量的重复代码.为了简化,引入了工厂模式. 工厂模式 function createPerson(name, age, job) { var obj = new Object(); obj.name = name; obj.age = age; obj.job = job; obj.sayHello(){ alert(this.name); }; return obj; } var p1 = createPers