在C++中有两种生成对象实体的方法,一个是常规创建(如下,编译器自动创建),另外一个是通过指针和内存分配。 People teacher =new People(); People *t1=teacher; 是创建了一个名字为teacher的“对象”,并将类型为People的“引用(指针)”t1指向teacher这个对象(有内存分配和实际的值)。这里我们如果再: *t1=null; 那么你仍然可以通过teacher来使用该对象。(如果上面语法行的通的话..好久没用C++了..) 而java中: People teacher = new People(); 实际是等于C++的: People *teacher =null; new People();//创建一个对象,包括分配空间等操作。 teacher=刚创建的People对象;//把teacher指针(引用)指向刚创建的对象。如果我们再: teacher=null; 那么刚才创建的对象将因为没有办法通过引用而访问而被闲置。c++中如果是通过malloc分配的空间,那么就会造成内存泄露。而java的vm可以自动将此对象收回。
这里str就是一个指向aa字符串的引用
c++里指针定义People *teacher = new People();
java引用定义为 People teacher = new People();
现在的感觉就是,java里面究竟什么是对象,什么是引用,我都搞糊涂了.
People是个自定义的类
teacher是这个类的一个实例如果在程序中要用到这个实例,那么teacher就要充当引用的角色,并通过它去对People这个对象的实例
teacher进行操作.我感觉说的好绕口啊!
Java中的句柄(应用)跟C++的指针没有什么区别。
而且Java的指针你是无法象C++那样操纵的
比如说,C++中的引用一生当中只能引用到一个对象或变量,可谓从一而终,而Java中的引用却可以朝三暮四,除非final引用。
你能操作的只有引用,也就是对象的句柄,或叫指针,或叫引用,都一个意思...
不管你新建一个什么对象,都是引用
People teacher =new People();
People *t1=teacher;
是创建了一个名字为teacher的“对象”,并将类型为People的“引用(指针)”t1指向teacher这个对象(有内存分配和实际的值)。这里我们如果再:
*t1=null;
那么你仍然可以通过teacher来使用该对象。(如果上面语法行的通的话..好久没用C++了..)
而java中:
People teacher = new People();
实际是等于C++的:
People *teacher =null;
new People();//创建一个对象,包括分配空间等操作。
teacher=刚创建的People对象;//把teacher指针(引用)指向刚创建的对象。如果我们再:
teacher=null;
那么刚才创建的对象将因为没有办法通过引用而访问而被闲置。c++中如果是通过malloc分配的空间,那么就会造成内存泄露。而java的vm可以自动将此对象收回。