前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JAVA 引用与对象

JAVA 引用与对象

作者头像
平凡的学生族
发布2019-05-25 09:36:47
4850
发布2019-05-25 09:36:47
举报
文章被收录于专栏:后端技术后端技术

参考:https://www.cnblogs.com/perfy/archive/2012/10/16/2726039.html

对象的引用

代码语言:javascript
复制
Person person = new Person("张三");
代码语言:javascript
复制
Person person;
person = new Person("张三");

此处,person只是一个指向对象的引用,new Person('张三')才是创建了这个对象。


代码语言:javascript
复制
Person person;
person = new Person("张三");
person = new Person("李四");

此处,首先声明了person这个"对象的引用",然后先让它指向"张三",后让其指向"李四"


代码语言:javascript
复制
Person person2 = person;

这句话并不是进行对象的复制,而是让person2也指向了 person指向的对象。

也就说,我们用person2改变值时,也会影响person指向对象的值。如下:

代码语言:javascript
复制
person2.setName("王五");
System.out.println(person.getName()); // 输出"王五"

函数传参

如果传入方法的是基本类型的东西,你就得到此基本类型的一份拷贝。如果是传递对象,则是传递了那个对象的引用。

详情请看如下代码与注释

代码语言:javascript
复制
package hello;

class Test03
{
    public static void main(String[] args)
    {
        StringBuffer s= new StringBuffer("good");
        StringBuffer s2=new StringBuffer("bad");
        test(s,s2);
        System.out.println("out of test, s is " + s); // 输出'goodhah'
        System.out.println("out of test, s2 is " + s2); // 输出'bad'
    }
    static void test(StringBuffer s,StringBuffer s2) 
    {
        System.out.println(s);
        System.out.println(s2);
        s2=s; //此时,局部变量s2已与  main中的s2所指向的StringBuffer脱离关系,而是指向了main中s指向的对象
        s=new StringBuffer("new"); // 此时,局部变量s已与  main中的s所指向的StringBuffer脱离关系,而是指向了新的StringBuffer对象
        System.out.println("after s is assigned to 'new', s is: " + s);
        System.out.println("after s2 is assigned to s('good'), s2 is: " + s2);
        
        s.append("hah");
        s2.append("hah");
        // 此时,局部变量s的操作与main中那两个StringBuffer无关了
        // 而s2改变的对象正是 main中的s指向的对象
        
        System.out.println("s is: " + s); // 输出 newhah
        System.out.println("s2 is: " + s2); // 输出 goodhah
    }
}

参考如上代码,我们发现,实际上JAVA的传递都是传递了值,只不过局部参数中的StringBuffer s其实是一个对于对象的引用。 换句话说,在java中,我们必须拥有一个对象的引用,才能去操作堆中的那个对象。而不能用c++中的思维去认为有"对象"及其"引用"。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.11.26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 对象的引用
  • 函数传参
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档