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