下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

详解java中的值传递、地址传递、引用传递

作者:课课家教育     来源: http://www.kokojia.com点击数:704发布时间: 2016-01-20 17:08:15

标签: java开发java语言java传递

大神带你学编程,欢迎选课

  一直来觉得对值传递和地址传递了解的很清楚,刚才在开源中国上看到一篇帖子介绍了java中的值传递和地址传递,看完后感受颇深。下边总结下以便更容易理解。

详解java中的值传递、地址传递、引用传递_java手游开发_java网站空间_课课家

  按照以前的理解,java中基本数据类型是值传递,对象是地址(引用)传递。给大家看个例子:

  public class ObjectTrans {

  public static void main(String[] args) {

  String name = "123";

  SChange(name);

  System.out.println(name);

  }

  public static void SChange (String str) {

  str = "234";

  }

  }

  大家思考下,这个例子输出的结果应该是123呢还是234呢?结果是123。why?一句话表达:对象也是值传递,只是把这个对象的引用copy了一份。

  其实java本来就是值传递,没有C++那样的指针传递,分步分析下上边的代码:

  1、name = "123"

  2、调用SChange str 和 name 共同指向 “123”(拷贝name的引用赋给str)

  3、str 重新赋值并指向“234”

  4、name指向不变还是“123”

  下边看另外一段代码:

  public class ObjectTrans {

  public static void main(String[] args) {

  StringBuilder name = new StringBuilder("123");

  SChange(name);

  System.out.println(name);

  }

  public static void SChange (StringBuilder str) {

  //str = "234";

  str.append("234");

  }

  }

  那么这段代码输出的结果应该是什么呢?答案是123234,why?同样分步分析:

  1、name = "123"

  2、调用SChange str 和 name 共同指向 “123”(拷贝name的引用赋给str)

  3、改变所指向对象的值"123"+"234"

  4、引用没变只是值变了,所以结果为123234

   请记住一句话:java只有值传递。

赞(0)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程