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指向的那个对象。举个例子来看:
方法调用的过程中也存在这样的别名问题:
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编程思想阅读笔记 第二章
- 【java编程思想笔记】第三章—操作符
- java编程思想阅读笔记(十)I/O系统(上)
- java 编程思想 阅读笔记(5)
- java编程思想阅读笔记(六)异常处理
- java编程思想阅读笔记(九)数组和容器
- Java编程思想阅读笔记(一)
- java 编程思想 阅读笔记(2)
- java编程思想阅读笔记(一)
- Java编程思想---第三章笔记
- java编程思想阅读笔记(二)访问权限控制和复用类
- java 编程思想的学习笔记 - 第三章 操作符 第四章 控制执行
- java编程思想阅读笔记之对象克隆
- java编程思想阅读笔记(一)
- java 编程思想阅读笔记(4)
- java 编程思想 阅读笔记(1)
- java 编程思想 阅读笔记(3)
- java编程思想笔记——第三章&&第四章
- Java 编程思想(第四版)学习笔记(8)多态
- Java编程思想 第四版 第二章 一切都是对象 笔记 思维导图