1

java中String究竟是传递的值,还是引用

很多人说,java中的String虽然是对象,但是具有值类型的特征。他是值传递,传递的值。
我认为这这种说法完全是错误的。
String和普通对象毫无区别,和其他对象一样,传递的是引用,而不是值。
一段String的运用代码:

 String a = "123";
public void change(String a){
    a = "234";
}

很多人会说,a的值没有变,是因为String是值传递,问题是,就算对于一个普通对象,这样的用法,该对象的值也是不会改变的!这是一个大大的误区。java中根本没有真正的引用传递,不想C#中有ref关键字!
比如:

 Person p = new Person("张三");
public void change(Person p){
    p = new Person("李四");
}

上面对于String的使用和这个自定义Person类的使用上,根本没有本质上的区别。同样,外面的p变量依然是”张三”,不会是“李四。”

同样的代码,放入C#中,加上ref关键字:

 Person p = new Person("张三");
public void Change(ref Person p){
    p = new Person("李四");
}

结果是,p变为了“张三”!

所以说,个人认为java中的String并没有什么特殊性,和其他类一样,同样保存的对象的引用,传递的引用。唯一的特殊性,就是可以直接用“”双引号的方式创建字符串对象。

查看全部
finemi
finemi
2015/06/10 13:31
  • jvm
  • java
  • 字符串
  • 点赞
  • 收藏
  • 回答
    私信
满意答案
查看全部

13个回复