Java只有值传递
测试用例
No1
/**
* Theme:数组的传递
* Author: Sunyi
* Date: 2020/11/7 16:35
* Conclusion:本质上类似于通过"."操作符修改对象的值
**/
public class Test1
{
public static void main(String[] args)
{
int [] array=new int[5];
for(int i=0; i<4; i++)
array[i]=i;
print(array);
change(array);
print(array);
}
public static void change(int [] a)
{
a[0]=1122;
}
public static void print(int [] a)
{
for(int e:a)
System.out.print(e+" ");
System.out.println();
}
}
结果:
0 1 2 3 4
1122 1 2 3 4
No2
package test2;
public class Point
{
int x,y;
public Point(){};
public Point(int a, int b)
{
this.x=a;
this.y=b;
}
public void printPoint()
{
System.out.println("x: "+this.x+" y: "+this.y);
}
}
package test2;
/**
* Theme:对象的传递
* Author: Sunyi
* Date: 2020/11/17 17:25
* conclusion:通过拷贝引用传递(两个引用指向同一个地址)
**/
public class Test2
{
public static void main(String[] args)
{
Point n1=new Point(1,1);
n1.printPoint();
change(n1);
n1.printPoint();
}
public static void change(Point p)
{
Point p2=new Point(2, 2);
p=p2;
// p.x=2; //用.可直接修改,因为指向同一内存地址
// p.y=2;
}
}
结果:
x: 1 y: 1
x: 1 y: 1
No3
/**
* Theme:String类型的传递
* Author: Sunyi
* Date: 2020/11/17 17:48
* conclusion:本质上也是拷贝引用,所以不会改变实参(String 原型为 final static char value[])
**/
public class Test3
{
public static void main(String[] args)
{
String st="dsfsd";
change(st);
System.out.println(st);
}
public static void change(String s)
{
s="aaaaaaaaaaaaaaaaaa";
}
}
结果:
dsfsd
总结
JAVA中只有值传递
传递对象时传递的是对象引用的拷贝
(即一个新的同种类型的引用,两个引用指向同一个地址)
收藏相关博客:
java方法传String类型的参数时,为啥方法对值的修改没有在方法之外生效?
为什么说Java中只有值传递
Java中方法调用参数传递的方式是传值,尽管传的是引用的值而不是对象的值。(Does Java pass by reference or pass by value?)
个人笔记