java(/android)中对象与引用

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

创新互联建站成立与2013年,是专业互联网技术服务公司,拥有项目成都做网站、网站制作网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元东港做网站,已为上家服务,为东港各地企业和个人服务,联系电话:028-86922220

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;
        }
    }
}

网站名称:java(/android)中对象与引用
文章位置:http://myzitong.com/article/pgsioc.html