Java编程思想笔记——赋值

赋值使用操作符“=”。它的意思是“取右边的值(即右值),把它复制给左边(即左值)”。右值可以是任何常数、变量或者表达式(只要它能生成一个值就行)。但左值必须是一个明确的、已命名的变量。也就是说,必须有一个物理空间可以存储等号右边的值。

一、基本数据类型的赋值

对基本数据类型的赋值是很简单的。基本数据类型存储了实际的数值,而并非指向一个对象的引用,所以在为其赋值的时候,是直接将一个地方的内容复制到了另一个地方。

public class TestA{
      public static void main(String[] args){
        int a,b;
        b=9;
        a=b;
        System.out.println("1.a="+a+"   "+"b="+b);  
        a=10;
        System.out.println("2.a="+a+"   "+"b="+b);  
      }
 }
 /*
*输出结果:
 *1.a=9  b=9
 *2.a=10  b=9
 */

上述代码,对基本数据类型使用a=b,那么b的内容就复制给了a。若接着又修改了a,而b根本不会受到这种修改的影响。但在对对象“赋值”的时候,情况却有所不同。

二、对象的“赋值”

对一个对象进行赋值操作时,我们真正操作的是对象的引用。所以将一个对象赋值给另一个对象,实际是将“引用”从一个地方复制到另一个地方。这意味着假如对对象使用c=d,那么c和d都指向原本只有d指向的那个对象。

public class Person {
    int age;
}
public class TestB {
    public static void main(String[] args) {
        Person p1=new Person();
        Person p2=new Person();
        p1.age=10;
        p2.age=20;
        p1=p2;
        System.out.println("1.p1.age="+p1.age+" p2.age="+p2.age);
        p1.age=15;
        System.out.println("2.p1.age="+p1.age+" p2.age="+p2.age);
    }
}
/*
 * 输出结果:
* 1.p1.age=20 p2.age=20
* 2.p1.age=15 p2.age=15
*/

上述代码,对Person对象使用p1=p2,再对p1赋值时也改变了p2.这是由于p1和p2包含的是相同的引用,它们指向相同的对象。原本p1包含的对对象的引用,是指向一个值为10的对象。在对p1赋值的时候,这个引用被覆盖,也就是丢失了;而那个不再被引用的对象会由“垃圾回收器”自动清理。

相关推荐