4
3. Java类变量都是(隐式声明为)引用型变量
例子1: Double a=new Double(1.5), b=a, c=b;
double x=2.5, y=x, z=y;
3.2 Java类与对象(续12)
Ch3-19
1.5
2.5 2.5 2.5
xyz
引用型类变量a, b, c 与实体型普通变量
x, y, z的存储差异
3.2 Java类与对象(续13)
例子2:两个平面直角坐标点作向量加法的函数。
class Point
{ int x, y;
public Point(int x, int y)
{ this.x=x;this.y=y; }
子程序中变量
a b c
Ch3-20
Point add(Point a, Point b)
{ Point c=new Point();
c.x=a.x+b.x; c.y=a.y+b.y;
return c;
}
主程序调用形式:Point p=add(a,b);
(4,6)
a
(1,2)
b
(3,4)
p
主程序中变量
4. 比较类变量相等
(1)引用是否相等的比较(用==运算符)
(2) 数据成员是否相等的比较(equals成员函数)
例3.4: Double a=new Double(1.5), b=a;
3.2 Java类与对象(续14)
Ch3-21
ou
e c=new
ou
e
.
;
则有 a==b 值为 true
a==c 值为 false
a.equals(b) 值为 true
a.equals(c) 值为 true
a
1.5
b
1.5
c
5. 类变量的默认初值:null
关键字null表示空引用,它是类变量的默认初
值; null可以向类变量赋值或者与类变量比较相等。
如:Point a=null;
==
3.2 Java类与对象(续15)
Ch3-22
6. Java类变量全部是引用类型的优点
(1) 比指针更安全
(2) 节省类变量赋值操作的时间
(3) 节省类变量的存储空间
7. Java类变量全部是引用类型的缺点
赋值操作(包括函数参数传递与返回值)无
法实现类对象实体的复制。
例:怎样实现类对象实体的整体拷贝?
3.2 Java类与对象(续16)
Ch3-23
public Point(Point p) { x=p.x; y=p.y; } //类Point的拷贝构造函数
public set(Point p) { x=p.x; y=p.y; } //拷贝赋值成员函数
…
Point a=new Point(1,2), b=new Point(a); //a, b 指向两个实体对象
a.set(b); //将b引用的对象数据成员拷贝到a引用的对象中
8. Java基本数据类型变量全部是实体类型的缺点
无法实现如下所示两个变量交换值的函数
//两个变量交换值的C++函数
void swap(int &a, int &b)
{ int temp=a; a=b; b=temp;
3.2 Java类与对象(续17完)
Ch3-24
}
//两个变量交换值的C函数
void swap(int p, int q)
{ int temp=p; p=q; q=temp;
}