我一直学习C++,是java的初学者,这一周正学习java的对象、引用,转载一些自己觉得很有意义的东东,以及java同C++的区别。
Public class Person{
Public String name;
Public int age;
Public void say(String content){
System.out.println(content);
}
}
这样一行代码:
Person p = new Person();
这行代码创建了一个person实例,这个person实例被赋给p变量。程序中定义的person类型的变量实际上是一个引用,它被存放在栈内存里,它指向实际的person对象,而真正的person对象则存放在堆内存中。
下图显示了将person对象赋给一个引用变量的示意图:
栈内存中的引用变量并未真正存储对象里的属性数据,对象的属性数据实际存放在堆内存里。而引用型变量仅仅只是指向该堆内存里的对象。从这个角度来看,引用型的变量与C语言里的指针很像,他们都是存储一个地址值,通过这个地址来引用到实际对象。实际上,java里的引用就是C里面的指针,只是java语言把这个指针封装起来,避免开发者进行繁琐的指针操作。
当一个对象被创建成功以后,这个对象将保存在对内存中,java程序不允许直接访问堆内存中的额对象,只能通过该对象的引用操作该对象。
Java中的引用于C的引用是有区别的,C语言中的引用是指变量的别名,在程序中不会为它分配任何的内存,而java的引用会在栈内存中分配一定的内存,更类似于c的指针。
C语言中的指针的类型与指针的定义
程序中对变量的操作,实际上是对某个地址的存储单元进行操作。这种直接按变量的地址存取变量值的方式称为“直接存取”方式。
指针变量:用来存放内存地址的变量称为指针变量。
设:指针变量p中存放了变量a的地址。则有如下图所示:
指针变量的定义:
形式: 类型名 *指针变量名1,指针变量名2,…;
如: int *pi,*pj;
说明:* 是说明符,用来说明该变量是指针变量;
int 是类型名,用来说明 pi 和 pj 是指向整型变量的指针。
指针的类型:指针所指向的变量的类型。
int 也称为 pi 、pj 的“基类型”
如:
int *p; /*p中只能存放整型变量的地址*/
double *pd; /*pd中只能存放double类型变量的地址*/
float *pf; /*pf中只能存放float 类型变量的地址*/
char *st; /*st中只能存放字符类型变量的地址*/
又如:
int *p,i,k;
i=3;
p=&i; /*将i 的地址赋给指针变量*/
k=*p; /*将所指地址中的内容赋给k*/
注:int *P ; 此时*P表示指针类型,* 是指针类型说明符,在非定义中的 *p 为所指变量中存放的内容,在此例中代表存储单元i。