java integer引用传递_在java中String,对象,Integer(包装类型的)关于引用传递还是值传递...
場(chǎng)景:
大家都知道基本的數(shù)據(jù)類型,int,float等等這種是按值傳遞的。但是對(duì)于String,對(duì)象,Integer是怎樣傳遞呢?
原理知識(shí):
如果參數(shù)類型是原始類型,那么傳過來的就是這個(gè)參數(shù)的一個(gè)副本,也就是這個(gè)原始參數(shù)的值,這個(gè)跟之前所談的傳值是一樣的。如果在函數(shù)中改變了副本的 值不會(huì)改變?cè)嫉闹?
如果參數(shù)類型是引用類型,那么傳過來的就是這個(gè)引用參數(shù)的副本,這個(gè)副本存放的是參數(shù)的地址。如果在函數(shù)中沒有改變這個(gè)副本的地址,而是改變了地址中的 值,那么在函數(shù)內(nèi)的改變會(huì)影響到傳入的參數(shù)。
如果在函數(shù)中改變了副本的地址,如new一個(gè),那么副本就指向了一個(gè)新的地址,此時(shí)傳入的參數(shù)還是指向原來的 地址,所以不會(huì)改變參數(shù)的值。
測(cè)試用例
輸出結(jié)果為:
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
測(cè)試說明:
String,基本類型(int等等),包裝類型(Integer等等)都是值傳遞
實(shí)際的對(duì)象為引用傳遞。
疑問:
在這里可能會(huì)有網(wǎng)友問了,包裝類型,String難道不是對(duì)象么?說實(shí)話這里我也有疑惑,但是不管怎么樣還是以測(cè)試結(jié)果為準(zhǔn)。
總結(jié)
以上是生活随笔為你收集整理的java integer引用传递_在java中String,对象,Integer(包装类型的)关于引用传递还是值传递...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java foreach order_J
- 下一篇: java redis缓存实例_sprin