技术中心

这里象征着我们的态度和能力

>JAVA 引用传递
发布者:中国IT实验室    信息来源:中国IT实验室    发布时间:2012-01-09      浏览次数:4814
分享到:

新浪微博

腾讯微博

QQ空间

豆瓣网

QQ好友

欢迎进入Java社区论坛,与200万技术人员互动交流 >>进入
在JAVA引用传递中,传递的是一个对象的指针,如果在方法B(Object b) 中传递对象b,则在B方法体中对b进行操作,如下
@Test
 public void testReference(){
  B b=new B();
  b(b);
  System.out.println(b.getId()); //结果为null
 }
 private void b(B b){
  b=new B();
  b.setId("123");
 }
 class B{
  private String id;
  public String getId() {
   return id;
  }
  public void setId(String id) {
   this.id = id;
  }
 }
则在外部得到的o并非被修改,这是因为在JAVA中的引用传递是虚拟引用,其只是在新的方法b中新 定义的一个指针b,而此b的引用和传递进来的参数指针指向的是同一地址,所以说是虚拟引用。在方法体b()中新建的了个对象进而赋值给b,此时方法体内的b就不是指向外部的地址了,而是指向新开辟的内存地址,固而在外部的指针仍然是指向的原来的地址,所以其的ID仍然为null.
而如果在方法体中对b进行set操作,则其外部的对象也被修改了。因此这样,方法体内部的b仍然是指向的是外部的指针指向的地址,对其进行set操作也即是对外部内存地址进行的修改。
*******关键需要理解的是:java中引用是在方法体内新建了一个指针,而并非是直接引用。  在需要用引用传递时,尽量用set方法来进行修改外部的值。 而如果外部对象是通过方法体获取的,则可以通过创建内部类来进行操作。如下:
@Test
 public void testObject(){
  A a=new A();
  a.item=new Item();
  a(a);
  System.out.println(a.item.getId());
 }
 private A a(A a){
  a.item=new Item("11", "name", "type", "", null);
  a.itemRevision=new ItemRevision();
  return a;
 }
 class A{
  Item item;
  ItemRevision itemRevision;
 }这样就可以达到引用的目的
4000-880-989
(24小时热线)
联系客服
微信公众号

官方公众号

小程序

©2008-2022 CORPORATION ALL Rights Reserved. 版权所有 滇ICP备09003328号-1 滇公网安备 53011102000818号
昆明那家网络公司好,新媒体运营,网站优化,网络推广,网站建设,网页设计,网站设计,网站推广,云南网站公司,昆明新媒体公司,云南网红主播,昆明SEO公司,昆明网站建设,昆明网络推广,昆明网站优化,昆明网站推广,红河网站建设,大理网络公司,曲靖网络公司,丽江网站设计,昭通网络公司,保山大数据服务,智慧高速建设,智慧校园服务,云南IDC服务商,网络安全测评,等保测评,网站关键词排名优化服务,服务客户尽超2000余家,一切尽在奥远科技,服务电话:13888956730
Baidu
map