在开始学java的时候就接触到这“对象”和 “引用”的概念,一直很模糊,今天就总结一下,算是对得起这和长时间的学习吧。
创新互联公司成都网站建设按需网站策划,是成都网站建设公司,为成都纱窗提供网站建设服务,有成熟的网站定制合作流程,提供网站定制设计服务:原型图制作、网站创意设计、前端HTML5制作、后台程序开发等。成都网站设计热线:18982081108Demo 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许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。