java(/android)中对象与引用-创新互联

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

创新互联公司成都网站建设按需网站策划,是成都网站建设公司,为成都纱窗提供网站建设服务,有成熟的网站定制合作流程,提供网站定制设计服务:原型图制作、网站创意设计、前端HTML5制作、后台程序开发等。成都网站设计热线:18982081108

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

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


新闻名称:java(/android)中对象与引用-创新互联
分享网址:http://ybzwz.com/article/dgihjh.html