Java中new和不new的区别
来源:互联网 发布:ipad淘宝网下载免费 编辑:程序博客网 时间:2024/04/30 18:33
例如以下两种情况1.ArrayList<BookInfo> InfoList=null; BookInfo bookinfo=null; bookinfo=test.getinfo();2.ArrayList<BookInfo> InfoList=new ArrayList<BookInfo>(); BookInfo bookinfo=new BookInfo(); bookinfo=test.getinfo();
首先要明白,java里对象传递的时候,传递的都是引用(也就是对象的地址),这比传递整个对象高效的多。而基础类型,int,double等传递的才是值。
比如,(new ArrayList).add(new String(“hello”)),jvm只是把new String(“hello”)的地址存入到了列表list里面。String str = new String(“Test”),是开辟内存放入了对象,并把它的引用赋给str,即str是一个地址,它指向对象new String(“test”)所开辟的内存空间,该空间中有值‘test’。
同理,BookInfo bookinfo=null与BookInfo bookinfo=new BookInfo():前者,是声明了一个对象(的引用),jvm并没有开辟内存放入一个对象;而后者,在声明了一个对象的引用后,又把新开辟的没有存储任何有效值的对象的地址赋给了他。bookinfo=test.getinfo(),又把它指向了另一个地址 ,也就是说原来开辟的内存并没有用,那就没有意义。但是java虚拟机自动垃圾回收机制会判断并回收内存的。。不用想太多。完全可以写成:ArrayList InfoList=new ArrayList();BookInfo bookinfo=infoList.getInfo()。
综上:如果你的类在创建后,要自己读写数据,那就必须初始化;如果像Bookinfo那样,完全是为了从其他地方接收引用,也完全可以省了new吧,还有我们需要知道的是,在使用对象的时候一般都是通过New,我们知道通过new关键字实际上是在heap(堆中)开辟了一块内存,而等号右边的这个对象实际上就是一个内存地址,不信的话,可以打印出来看看。其实并不仅仅这么简单。堆上分配的是大小不定的对象,而栈上对象的大小是固定的,基本数据类型(int,short)什么的都在栈上,堆上对象的引用也在栈上,如果堆上的对象在栈(stack)上没有了引用,它就被GC回收了。
- Java中new和不new的区别
- C++中new和不new的区别
- Java中"throw new Exception() "和"new Exception()"的区别
- C++new 和不new的区别,java引用数据类型必须new
- Java中new和newInstance的区别
- Java中new和newInstance的区别
- java中new和newInstance的区别
- java中new和反射的区别
- java中new和newInstance的区别
- java 中new 和.newInstance() 的区别
- C++中使用new定义的变量和不使用new定义的变量区别
- c++ new和不new对象的区别
- Java中new File("."),new File(""),new File(".."),new File(".\\")的区别
- PHP中new static() 和 new self() 的区别
- PHP中new self()和new static()的区别探究
- PHP中new self()和new static()的区别
- PHP 中 new static 和 new self 的区别
- java中newInstance()和new()区别
- swift2.0 常用标注 //MARK-: 替换 #pragma mark
- PHPStorm添加第三方库的代码自动补全
- Draw Shapes——绘制图形
- 【raspberry】(四)温湿度传感器DHT11
- c#加载xml的快速高效的算法
- Java中new和不new的区别
- 通过diff工具生成补丁, patch工具打上补丁.
- c语言中静态库动态库的创建与使用
- 本地编译全志R系列的步骤7(Ubuntu 17.04非长期支持版本)V1.0(分色排版)
- BZOJ 2594: [Wc2006]水管局长数据加强版(LCT+最小生成树+离线)
- 小鸟云计算丨香港服务器带宽价格为什么差异大
- 数字证书原理
- PHP的运行机制与原理(底层)
- Xutils3.0解析数据并展示。