[Java] 对象和引用的理解

之前对Java对象和引用的定义不清晰,赶紧补上,然后来讲讲我对 对象 和 引用 的理解。

开宗明义

StringBuffer s = new StringBuffer("new String");

new StringBuffer(“new String”)是对象
s 是 对new StringBuffer(“new String”)的引用
StringBuffer 是类

然后解释

Java创建一个对象是在堆空间上创建的 所以对象指的就是堆空间上的那一片区域

s可以是指向对象那一片的东西 用专业术语来讲 就是通过我们可以操作的标识符(s)就是引用

举个例子理解一下 一个气球由两部分组成一个充满气体的气球和用来捆住气球的绳子。 气球就是对象,而绳子就是引用。

再来说说 参数传递的问题

package Reference;

public class reference {
    static void Basic(int m){
        m +=10;
        System.out.println(m);
        //11
    }

    static void reference_add(StringBuffer s){
        s.append("_add");
    }
    static void reference_init(StringBuffer s){
        s = new StringBuffer("New String");
    }
    public static void main(String argv[]){
        int num = 1;
        Basic(num);
        System.out.println(num);
        //1
        StringBuffer s = new StringBuffer("new String");
        reference_add(s);
        System.out.println(s);
        //new String_add
        s = new StringBuffer("new String");
        reference_init(s);
        System.out.println(s);
        //new String
    }
}

首先 明确一点 Java只有值传递如果参数是基本类型那么得到的是一个基本类型的拷贝 如果参数是引用那么得到的是引用的拷贝

从三个方法中可以看出 如果我们传基本类型进去是不会发生改变的

但是我们传引用进去 就值得讨论的

我们传的是引用 得到是引用的一个拷贝 然后引用是指向对象的一个可控我们操作的标识符

在reference_add中 我们通过引用在对象的空间中修改了内容 所以修改是有效的

在reference_init中 我们修改了拷贝引用所指向的内容 所以无论怎么修改只是拷贝引用指向的对象发生了变化 和 引用指向的对象无关

用我之前的例子来讲就是 我们用过绳子往气球上画了一些东西 所以这个气球发生了变化

但是我们用第二根绳子捆住气球之后 把这个第二根绳子捆住的气球换了一个新气球,新气球发生的所有变化和老气球无关。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值