对象和对象变量之间存在着一个重要的区别要熟悉到重要的一点:对象变量并不实际包罗一个对象,它只是引用一个对象。在Java中,任何对象变量的值都是一个引用,指向存储在另外一个地方的某个对象。new 操纵符的返回值也是一个引用。下面的语句:
Date startTime界说了一个对象变量startTime,它可以引用Date类型的对象。但是,一定要熟悉到它不是一个对象,而且实际上它没有引用任何对象。所以无法调用startTime.toString()方法。所以必须起首初始化startTime变量,可以写成startTime = rightnow或者startTime = new Date(),这两种写法都引用了同一个对象
Java的对象变量虽然引用了对象,但是C++中没有null作用,而且引用不能赋值。应当把对象变量看作是类似于C++的对象指针,比方:LocalDate类
Date rightNow; // Java
实际上等同于
Date* rightNow; //C++
一旦创建了这种关联,一切就清晰了。固然,只有利用了new调用后Date * 指针才会初始化。就这一点而言,C++与 Java的语法儿乎是一样的。
Date* rightNow= new Date();//C++
假如把一个变量复制到另一个变量,两个变量就指向同一个日期,即它们是同一个对象的指针。Java中的null引用对应于C+中的NULL指针。
所有的Java对象都存储在堆中。当一个对象包罗另一个对象变量时,它只是包罗另一个堆对象的指针。
在C++中,指针十分令人头疼,因为它们很容易出错。稍不小心就会创建一个错误的指针,或者使内存管理出问题。在Java语言中,这些问题都不复存在。假如利用一个没有初始化的指针,那么运行时体系将会产生一个行时错误,而不是生成随机的结果。另外,你不必担心内存管理问题,垃圾回收器会处理相关的变乱。
C++确实做了很大的努力,它通过支持复制构造器和赋值送算符来实现对象的主动复制。比方,一个链表(linked list)的副本是一个新链表,其内客与原始链表类似但是有一组独立的链接。这样一来就可以适本地计划类,使它们与内置类型有类似的复制行为。在Java中,必须利用cone方法获得一个对象的完整副本。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) | Powered by Discuz! X3.4 |