Java究竟是通过值传递还是引用传递呢?

来源:互联网 发布:电商视觉人工智能 编辑:程序博客网 时间:2024/06/01 10:35

这个问题困惑了许多初学Java的开发者,也是面试经常被问到的。现在,我用一些小例子,以及图示来说明并强调一下,Java是通过值传递的。

1.定义:

值传递:对传入的实参的真实值在内存中进行一份拷贝。

引用传递:对传入的实参的地址做一份拷贝。


2.传递原始类型(如Type类型,有8种,byte,short ,char,int ,long ,float,double,boolean)变量

因为Java是值传递的,并不难理解下面这些代码并不会交换什么。

swap(Type arg1, Type arg2) {    Type temp = arg1;    arg1 = arg2;    arg2 = temp;}

3.传递Object类型的变量

Java通过引用来操作对象,且所有的对象变量都是引用。然而,Java在方法中传递的参数并不传递引用,是通过值传递。

那么问题来了,为什么传进去对象的成员变量的值会改变呢?

例如下面的代码:

package test;class Apple{public String color="red";}public class test {public static void main(String args[]) {Apple apple=new Apple();System.out.println(apple.color);changeApple(apple);System.out.println(apple.color);}public static void changeApple(Apple apple){apple.color="green";}}

java-pass-by-value

因为原始的引用和拷贝的引用指向同样的对象,所以对象的成员变量的值会改变!


输出:

red
green























0 0
原创粉丝点击