package com.marsyoung.learning.java8;
public class TestBasicType {
/**
* 如果参数类型是原始类型,那么传过来的就是这个参数的一个副本,也就是这个原始参数的值,这个跟之前所谈的传值是一样的。
* 如果在函数中改变了副本的 值不会改变原始的值.
* @param p
*/
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";
}
/**如果参数类型是引用类型,那么传过来的就是这个引用参数的副本,这个副本存放的是参数的地址。
* 如果在函数中没有改变这个副本的地址,而是改变了地址中的 值,那么在函数内的改变会影响到传入的参数。
* @param p
*/
public static void methodObj(Person p) {
p.setId(34534);
}
/**
* 如果在函数中改变了副本的地址,如new一个,那么副本就指向了一个新的地址,
* 此时传入的参数还是指向原来的 地址,所以不会改变参数的值。
*
* @param p
*/
public static void methodObj2(Person p) {
p = null;//指向了新的地址。
System.out.println(p);
p = new Person();
System.out.println(p);
}
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());
System.out.println(p);
TestBasicType.methodObj2(p);
System.out.println(p);
}
}
<pre name="code" class="java">package com.marsyoung.learning.java8;
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;
}
}