服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - 详解java的值传递、地址传递、引用传递

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

2020-11-24 14:58Java教程网 Java教程

这篇文章主要介绍了详解java的值传递、地址传递、引用传递的相关资料,需要的朋友可以参考下

详解java值传递地址传递引用传递

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
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”

下边看另外一段代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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只有值传递。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

原文链接:http://www.bianceng.cn/Programming/Java/201502/47977.htm

延伸 · 阅读

精彩推荐