java方法参数的传递有两种,值传递和引用传递。
1.按值传递:
参数类型是int,long等八大基本数据类型时,参数传递的过程是按值拷贝的过程
如下代码
1
2
3
4
5
6
7
8
9
|
public static void main(String[] args) { int a = 5 ; fun(a); System.out.println(a); // 输出结果为5 } private static void fun( int a) { a += 1 ; } |
2.按引用传递
参数类型为引用类型,参数传递的过程采用拷贝引用的方式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
public class Test { public static void main(String[] args) { A a = new A( 5 ); fun(a); System.out.println(a.a); // 输出结果为6 } private static void fun(A a) { a.a += 1 ; } static class A { public int a; public A( int a) { this .a = a; } } } |
再看下面这种情况:
1
2
3
4
5
6
7
8
9
10
|
public class Test { public static void main(String[] args) { Integer a = 5 ; fun(a); System.out.println(a); // 输出结果为5 } private static void fun(Integer a) { a += 1 ; } } |
这里明明是引用传递,为什么没有改变对象的值呢?
这里其实使用了基本数据类型封装类的自动装箱功能。
Integer a = 5,编译后实际为Integer a = Integer.valueOf(5),查看Integer的源码,并没有改变原对象的值,只是将其引用指向了另一个对象。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://www.cnblogs.com/linwenbin/p/12308245.html