场景:
大家都知道基本的数据类型,int,float等等这种是按值传递的。但是对于String,对象,Integer是怎样传递呢?
原理知识:
如果参数类型是原始类型,那么传过来的就是这个参数的一个副本,也就是这个原始参数的值,这个跟之前所谈的传值是一样的。如果在函数中改变了副本的 值不会改变原始的值.
如果参数类型是引用类型,那么传过来的就是这个引用参数的副本,这个副本存放的是参数的地址。如果在函数中没有改变这个副本的地址,而是改变了地址中的 值,那么在函数内的改变会影响到传入的参数。
如果在函数中改变了副本的地址,如new一个,那么副本就指向了一个新的地址,此时传入的参数还是指向原来的 地址,所以不会改变参数的值。
测试用例
public class Person { private int id; private String name;public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; }
}
public class TestBasicType { public static void methonInt(int p) { p =10; } public static void methonInteger(Integer p) { p =10; } public static void methonString(String p) { p ="word"; } public static void methonStringObject(String p) { p ="world"; } public static void methodObj(Person p) { p.setId(34534); } public static void main(String[] args) { int a =3; Integer b =4; String s ="hello"; String sobj = new String("hello"); Person p = new Person(); p.setId(12312); TestBasicType.methodObj(p); TestBasicType.methonInt(a); TestBasicType.methonInteger(a); TestBasicType.methonString(s); System.out.println("--int-------->" + a); System.out.println("--Integer-------->" + b); System.out.println("--String-------->" + s); System.out.println("--StringObject-------->" + sobj); System.out.println("--Object-------->" + p.getId()); } } 输出结果为: --int-------->3 --Integer-------->4 --String-------->hello --StringObject-------->hello --Object-------->34534
测试说明:
String,基本类型(int等等),包装类型(Integer等等)都是值传递
实际的对象为引用传递。
疑问:
在这里可能会有网友问了,包装类型,String难道不是对象么?说实话这里我也有疑惑,但是不管怎么样还是以测试结果为准。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于