您的位置:首页 > 编程语言 > Java开发

java编程思想阅读笔记 第三章(赋值操作=)

2017-04-25 20:17 253 查看
Java的赋值操作(=)应该分为两种情况:

1. 针对基本数据类型的赋值操作

2. 针对对象的赋值操作

基本数据类型的赋值很简单。基本数据类型存储了实际的数值,而并非是指向对象的引用,所以在为其赋值的时候,是直接讲一个地方的内容复制到了另一个地方。例如对基本数据类型使用a=b,那么b的内容直接复制给a。若接着又修改了a,而b根本不会受影响。

以交换两个数为例:

public class Swap {

public void swap(int a ,int b)
{
int temp=a;
a=b;
b=temp;
}
public static void main(String[] args) {
int a=5,b=6;
System.out.println("a="+a+"\tb="+b);
Swap s=new Swap();
s.swap(a, b);
}

}
输出结果为:a=5 b=6

我们可以看到,对基本数据类型的赋值操作并不会影响到原来的值。

但是当为对象赋值时,情况发生了变化。对一个对象进行操作时,我们真正操作的是对象的引用。所以如果将一个对象赋值给另一个对象,实际上是将引用从一个地方复制到另一个地方。这意味着如果对对象使用c=d,那么c和d都指向原本只有d指向的那个对象。举个例子来看:
class Tank
{
int level;
}
public class Assignment {

public static void main(String[] args) {
Tank t1=new Tank();
Tank t2=new Tank();
t1.level=1;
t2.level=2;
System.out.println("t1.level:"+t1.level+"\tt2.level:"+t2.level);
t1=t2;
System.out.println("t1.level:"+t1.level+"\tt2.level:"+t2.level);
t1.level=25;
System.out.println("t1.level:"+t1.level+"\tt2.level:"+t2.level);
}

}
输出结果为:
t1.level:1		t2.level:2
t1.level:2		t2.level:2
t1.level:25		t2.level:25

方法调用的过程中也存在这样的别名问题:

class Letter
{
char c;
}

public class PassObject {

static void f(Letter f)
{
f.c='z';
}

public static void main(String[] args) {

Letter x=new Letter();
x.c='a';
System.out.println("x.c:"+x.c);
f(x);
System.out.println("x.c:"+x.c);
}

}
输出结果为:
x.c:a
x.c:z
我们可以看到,实际上函数传递了一个引用,所以f()实际上改变的是该函数之外的对象。













                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Java