六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 24|回复: 0

java String type传值

[复制链接]

升级  5.33%

62

主题

62

主题

62

主题

举人

Rank: 3Rank: 3

积分
216
 楼主| 发表于 2013-1-26 13:31:01 | 显示全部楼层 |阅读模式
一般大家都清楚primitive type传值的话,不会改变原有值。
For example:
public class TestPrimitiveType {int original = 9;    int[] arr = {1, 2, 3};         public static void main(String args[]) {    TestPrimitiveType ti = new TestPrimitiveType();           ti.change(ti.original, ti.arr);           System.out.print(ti.original + " and ");           System.out.println(ti.arr[0] + " " + ti.arr[1] + " " + ti.arr[2]);       }         public void change(int original, int[] arr) {        original = 100;        arr[0] = -1;    }}
输出: 9 and -1 2 3

再测试一下它的wrapper类:
public class TestInteger {Integer obj = new Integer(9);         Integer[] arr = {1, 2, 3};         public static void main(String args[]) {    TestInteger ti = new TestInteger();           ti.change(ti.obj, ti.arr);           System.out.print(ti.obj + " and ");           System.out.println(ti.arr[0] + " " + ti.arr[1] + " " + ti.arr[2]);       }         public void change(Integer obj, Integer[] arr) {           obj = 100;           arr[0] = -1;    }}
输出: 9 and -1 2 3,跟它的primitive type一样,并没有在调用change方法后改变其值。

测试一下String类也一样。
public class TestString {String obj = new String("not changed");         char[] arr = {'a', 'b', 'c'};         public static void main(String args[]) {       TestString ts = new TestString();           ts.change(ts.obj, ts.arr);           System.out.print(ts.obj + " and ");           System.out.println(ts.arr);       }         public void change(String obj, char[] arr) {           obj = "changed";        arr[0] = 'w';    }}
输出: not changed and wbc,因为String是final class,而且在java方法中String类的调用占80%,因此java对String类做了特殊处理,当String值传递到change方法时,你可以理解为其实是传递了一个拷贝过去,拷贝的obj指向新创建的字符串"changed",但并不改变原有obj的指向。
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表