zoukankan      html  css  js  c++  java
  • Java对象声明时:new与null的区别

    作者:林子云
    链接:https://www.zhihu.com/question/21468505/answer/18333632
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    首先要明白,java里对象传递的时候,传递的都是引用(也就是对象的地址),这比传递整个对象高效的多。而基础类型,int,double等传递的才是值。
    比如,(new ArrayList<String>).add(new String("hello")),jvm只是把new String("hello")的地址存入到了列表list里面。String str = new String("Test"),是开辟内存放入了对象,并把它的引用赋给str。

    同理,BookInfo bookinfo=null与BookInfo bookinfo=new BookInfo():前者,是声明了一个对象(的引用),jvm并没有开辟内存放入一个对象;而后者,在声明了一个对象的引用后,又把新开辟的没有存储任何有效值的对象的地址赋给了他。bookinfo=test.getinfo(),又把它指向了另一个地址 = = 也就是说原来开辟的内存并没有用,那就没有意义。但是java虚拟机自动垃圾回收机制会判断并回收内存的。。不用想太多。
    你完全可以写成:
    ArrayList<BookInfo> InfoList=new ArrayList<BookInfo>();
    BookInfo bookinfo=infoList.getInfo()。

    综上:如果你的类在创建后,要自己读写数据,那就必须初始化;如果像Bookinfo那样,完全是为了从其他地方接收引用,也完全可以省了new吧。

    如果是在类的成员变量中,BookInfo bookinfo;和BookInfo bookinfo=null;是一样的效果;因为该类在初始化时成员变量也会做初始化,默认就是null;而方法内的变量则不会初始化;

    而如果是在方法的成员变量,则必须初始化,也就是=null或者new,因为为了保证java的安全性;

  • 相关阅读:
    函数(方法
    变量
    常量
    文档注释与多行注释的区别
    标识符
    [置顶] WebService学习总结(3)——使用java JDK开发WebService
    WebService学习总结(2)——WebService是什么?
    [置顶] WebService学习总结(1)——WebService相关概念
    [置顶] WebService学习总结(1)——WebService相关概念
    Java基础学习总结(38)——Lombok的使用和原理
  • 原文地址:https://www.cnblogs.com/LingCoder/p/Java.html
Copyright © 2011-2022 走看看