场景:
你们都知道基本的数据类型,int,float等等这种是按值传递的。可是对于String,对象,Integer是怎样传递呢?java
原理知识:
若是参数类型是原始类型,那么传过来的就是这个参数的一个副本,也就是这个原始参数的值,这个跟以前所谈的传值是同样的。若是在函数中改变了副本的 值不会改变原始的值.函数
若是参数类型是引用类型,那么传过来的就是这个引用参数的副本,这个副本存放的是参数的地址。若是在函数中没有改变这个副本的地址,而是改变了地址中的 值,那么在函数内的改变会影响到传入的参数。测试
若是在函数中改变了副本的地址,如new一个,那么副本就指向了一个新的地址,此时传入的参数仍是指向原来的 地址,因此不会改变参数的值。this
测试用例
输出结果为:
spa
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
code
--Integer-------->
4
orm
--String-------->hello
对象
--StringObject-------->hello
ci
--Object-------->
34534
get
测试说明:
String,基本类型(int等等),包装类型(Integer等等)都是值传递
实际的对象为引用传递。
疑问:
在这里可能会有网友问了,包装类型,String难道不是对象么?说实话这里我也有疑惑,可是无论怎么样仍是以测试结果为准。