zoukankan      html  css  js  c++  java
  • java对象与引用及参数传递

    对象

    对象(object)是类(class)的实例(instace)。对象一般存储在中。

    引用

    引用(reference)是对象(object)的标识符。引用存放的是该对象的地址,存放在中。

    代码

    User user = new User( );
    这条语句的动作称为创建一个对象,它包含了四个动作:
    1. 右边的new People,是以Pelple类为模板,在堆空间中创建一个People类对象
    2. 结尾的(),在对象创建后,立刻调用People类的构造函数,对刚生成的对象初始化。这个例子中包含了构造函数,如果没写,java会自动帮你补上。
    3. 左侧的People one创建了一个People类的引用变量。即one是指向People对象的引用。
    4. “=”操作符使对象引用指向刚创建的People对象。注意是指向,不是赋值。
    User user1 = new User( );
    User user2 = new User( );
    user1 = user2;
    最后引用user1、user2都指向一个User对象。也就是说一个对象可以有多个引用,但一个引用最多指向一个对象。
    代码中有一个User对象由于引用消失,所以该对象会交由垃圾处理器处理(可能垃圾回收器现在不收回该对象空间)。
     

    参数传递

    《thinking in Java》:When you’re passing primitives into a method,you get a distinct copy of the primitive. When you’re passing a reference into a method, you get a copy of the reference.

    传递的是参数的副本     基本类型传递的是的副本、对象传递的是引用的副本。

    代码

    test1:

    public class TestPass1 {
        public static void testPass(int t){
            t = 2;
        }
        public static void main(String[] args){
            int t = 9;
            System.out.println("Before testPass: t = " + t);
            testPass(t);
            System.out.println("After testPass: t = " + t);
        }
    }
    out:
    Before testPass: t = 9
    After testPass: t = 9

    test2:

    public class TestPass2 {
        public static void testPass(StringBuffer strBuf){
            strBuf.append(" world");
        }
        public static void main(String[] args){
            StringBuffer strBuf = new StringBuffer("hello");
            System.out.println("Before testPass: strBuf " + strBuf);
            testPass(strBuf);
            System.out.println("After testPass: strBuf " + strBuf);
        }
    }
    out:
    Before testPass: strBuf hello
    After testPass: strBuf hello world

    test3:

    public class TestPass3 {
        public static void testPass(StringBuffer strBuf){
            strBuf = new StringBuffer(" world");
        }
        public static void main(String[] args){
            StringBuffer strBuf = new StringBuffer("hello");
            System.out.println("Before testPass: strBuf " + strBuf);
            testPass(strBuf);
            System.out.println("After testPass: strBuf " + strBuf);
        }
    }
    out:
    Before testPass: strBuf hello
    After testPass: strBuf hello
     

    refence:

    http://alexyyek.github.io/2014/12/29/Reference/

    http://blog.sina.com.cn/s/blog_4b622a8e0100c1bo.html

  • 相关阅读:
    C#开源资源大汇总
    未来IT人才市场最热门的12项技能
    C#中使用ROT13加密解密
    SphinX人像识别 联想笔记本人脸识别系统 (适合所有带摄像头的电脑)
    关于电脑的困惑,请各位大哥给个指点
    用Cacls修改文件访问控制权限
    2008年国外最佳Web设计/开发技巧、脚本及资源总结
    mysql密码设置
    MySQL常规练习 .MySQL安装成功后的进入方式
    JSTL包
  • 原文地址:https://www.cnblogs.com/maying3010/p/5837227.html
Copyright © 2011-2022 走看看