问题描述
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();