Java是值传递还是引用传递

简介:

1.Java到底是值传递还是引用传递?

首先找到一个面试题及答案:

当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?

是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。

 

上实例代码:

复制代码
 1 public class ReferencePkValue {
 2     public static void main(String[] args) {
 3         int num = 1;
 4         foo(num); // num 没有被改变
 5 
 6         String str = "ABC";
 7         foo(str); // str 也没有被改变
 8 
 9         StringBuilder sb1 = new StringBuilder("iphone");
10         foo1(sb1); // sb 被改变了,变成了"iphone4"。
11         
12         StringBuilder sb2 = new StringBuilder("iphone");
13         foo2(sb2); // sb 没有被改变,还是 "iphone" 
14         
15         
16         System.out.println("num:" + num);//num:1
17         System.out.println("str:" + str);//str:ABC
18         System.out.println("sb1:" + sb1.toString());//sb1:iphone4
19         System.out.println("sb2:" + sb2.toString());//sb2:iphone
20     }
21     //第一个例子:基本类型
22     static void foo(int value) {
23         value = 100;
24     }
25 
26     //第二个例子:没有提供改变自身方法的引用类型
27     static void foo(String text) {
28         text = "windows";
29     }
30 
31     //第三个例子:提供了改变自身方法的引用类型
32     static void foo1(StringBuilder builder) {
33         builder.append("4");
34     }
35 
36     //第四个例子:提供了改变自身方法的引用类型,但是不使用,而是使用赋值运算符。
37     static void foo2(StringBuilder builder) {
38         builder = new StringBuilder("ipad");
39     }
40 
41 }
复制代码

 

示例三图例;

builder.append("4")之后

 

示例四图解:

 

builder = new StringBuilder("ipad"); 之后

 



本文转自SummerChill博客园博客,原文链接:http://www.cnblogs.com/DreamDrive/p/7400988.html,如需转载请自行联系原作者

相关文章
|
3月前
|
Java
java是值传递还是引用传递
本文澄清了Java中参数传递的常见误解,总结出Java采用“值传递”的方式。对于基本类型,传递其值的拷贝,方法内修改不影响原值;而对于对象类型,则传递其引用地址的拷贝,尽管是拷贝,但因指向同一对象,故方法内的修改会影响原对象状态。形参仅在方法内部有效,而实参则是调用方法时传递的具体值。通过示例和比喻(如复刻仓库钥匙),形象地解释了值传递、引用传递及Java特有的“共享对象传递”概念,帮助理解不同情况下参数传递的行为差异。
|
3月前
|
Java
java中的值传递和引用传递
【8月更文挑战第3天】在Java中,值传递用于基本数据类型,传递的是值的副本,因此方法内的修改不影响原值;而引用传递用于对象和数组,虽传递的是引用的副本,但对对象内容的修改会影响原始对象。理解这两者对于正确处理方法调用及参数至关重要。
|
3月前
|
Java
java中的值传递和引用传递
【8月更文挑战第2天】在Java中,基本数据类型如`int`、`double`等采用值传递,传递的是变量值的副本,因此方法内的修改不影响原变量。对象类型则通过引用传递,传递的是对象引用的副本,允许方法内修改原对象。例如,对`StringBuilder`对象的修改会影响原始对象。
|
6月前
|
存储 安全 Java
Java方法的值传递技术详解
Java方法的值传递技术详解
39 3
|
5月前
|
Java
Java的值传递与“引用传递”辨析
Java的值传递与“引用传递”辨析
26 0
|
6月前
|
JavaScript 前端开发 Java
【JAVA面试题】什么是引用传递?什么是值传递?
【JAVA面试题】什么是引用传递?什么是值传递?
|
6月前
|
Java
每日一道Java面试题:Java是值传递还是引用传递?
每日一道Java面试题:Java是值传递还是引用传递?
35 1
|
6月前
|
存储 Java
如何理解Java是按值传递
如何理解Java是按值传递
|
6月前
|
存储 搜索推荐 Java
Java 数组、二维数组、值传递和引用传递的区别
Java 数组、二维数组、值传递和引用传递的区别
72 0
下一篇
无影云桌面