java中string做参数_java中String参数传递方式

最近在学习java参数值传递与参数传递方式,对于基本类型和引用类型和字符串得到了和预期不一样的效果

1、对于int等基本数据类型:

public static void main(String[] args) {

int num = 1;

change(num);

System.out.println(num);

}

public static void change(int num) {

num =10;

}

得到的结果是:1

对于基本数据类型创建时是存储在stack中的,参数传递时复制一份相同的值num'。在方法中修改的是复制参数的值不会影响在原先的数据。

2、对于引用数据类型:

public static void main(String[] args) {

int[] tem = new int[]{1, 2, 3};

change(tem);

System.out.println(tem[0]);

}

public static void change(int[] s) {

s[0] = 100;

}

得到的结果是:100

对于引用数据类型创建时会在heap中开辟一块空间来存储具体的值,在stack中保存一个tem地址指向heap中具体数据区域。在参数传递时复制一个引用tem',他和tem都指向同一块数据,所以更改会改变tem中的数据。

3、对于String类型:

public static void main(String[] args) {

String s = "嗯哼哼";

change(s);

System.out.println(s);

}

public static void change(String s) {

s += "振振有词";

}

得到的结果是:嗯哼哼

讲道理字符串String是引用类型,却没有像数组那样被修改,很奇怪。

前面说了引用类型在参数传递时会复制一个引用地址s'和s一同指向数据区域(String由于其特殊性不一定存放在heap中)。但是我们在函数中对s'指向的数据(这时候和s指向地址的相同)修改时,因为字符串不可修改会重新建立一个字符串并将s'指向这块区域。所以并没有改变s指向的区域数据。

你可能感兴趣的:(java中string做参数)