java(/ android)中对象 与 引用

在开始学java的时候就接触到这“对象”和 “引用”的概念,一直很模糊,今天就总结一下,算是对得起这和长时间的学习吧。

Demo demo = new Demo();

这样的语句应该是再常见不过的了,左边的就是引用,右边的才是我们据说的对象。

引用是存放在栈区的,而对象是放在堆区的。形同于C里边的指针,demo指向new出来的新对象。这俩人的关系应该是互相独立的,一个对象可以有多个引用, 同样一个引用也可以引用多个对象。

我们经常遇到的参数的传递,在java中,一般都是值传递,但需要说明一下的是,如果一个方法的形参是一个对象,那么这,就是引用的传递了,运行完这个方法以后,原来的值会发生改变。 因为,我们对对象是不能直接操作的,一般都通过对象的引用来操作对象。来看下面的例子:

这是一个非常简单的类:
public class Demo {
    private int a = 1 ;
    public int getA() {
        return a;
    }
    public void setA(int a) {
        this.a = a;
    } 
}
在下面这个类中会用它的对象作为一个方法的形参:
public class ObjectDemo {
    public static void main(String[] args) {
        Demo demo = new Demo();
        System.out.println("改变前:" + demo.getA()); // -- 改变前:1
                                                                                                                         
        new ObjectDemo().fun(demo);
        System.out.println("改变后:" + demo.getA()); // -- 改变后:1000
                                                                                                                         
    }
    public void fun(Demo test){
        test.setA(1000);   // 改变一下a的值
    }
}

我们可以看到运行后的结果,如果是值的传递,改变前和改变后应该是一样的,但事实却相反以。这应该不需要再解释什么了吧~


   再看看这个吧:

public class MainActivity extends Activity {
    private static final String TAG = "MainActivity";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        AAA demo = new AAA();    
        View view = new View(MainActivity.this);
        view.setTag(demo);  // a=99  
        //view.setTag(new AAA());   //a=55; 这里用到的才是对象
               
        demo.a = 100;
        Log.i(TAG, "demo: "+demo.a);    // -- 100
               
               
        AAA test = (AAA) view.getTag();
        Log.i(TAG, "test: "+test.a);   // -- 100
    }
    class AAA{
        int a = 55 ;
        public int getA(){
            a = 99;
            return a;
        }
    }
}


本文出自 “我的天地” 博客,请务必保留此出处http://eaglemengwei.blog.51cto.com/5172327/1389301

java(/ android)中对象 与 引用,,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。