• 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赋值的时候,这个引用被覆盖,也就是丢失了;而那个不再被引用的对象会由“垃圾回收器”自动清理。


    作者:牧汜
    出处:http://www.cnblogs.com/czbxdd/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    例图作业
    冲刺第二天
    Day9
    Day8
    Day7
    Day6
    Day5
    Day4
    Day2
    第四次作业——个人作业——软件案例分析
  • 原文地址:https://www.cnblogs.com/czbxdd/p/9031338.html
Copyright © 2020-2023  润新知