String类型参数的传值问题

public class TestString
{
public static void link(String a)
  {
  a+="word";
  }
  public static void main(String []args)
  {
  String a="hello";
  link(a);
  System.out.println(a);

  }
}

输出的是 hello ,不是hello word 

:这是个引用数据类型数据传递的问题(相当与我们常说的传引用调用),并非基本数据类型的参数传递(传值调用)。
public static void link(String a) 

  a+="word";         //语句2,把这个参数叫a2


String a="hello";    //语句1,把这个参数叫a1

语句1在执行的时候在堆中产生了一个"hello"对象,然后栈中引用变量指向a1指向"hello",在执行link(a)时将a1传给了a2,此时只是在栈中多了一个a2变量,堆中并没有新产生一个"hello"对象,即a1和a2指向的是同一个"hello",然后执行语句一a+="world";此时在堆中有产生了一个对象"helloworld",并将变量a2指向这个"helloworld",但a1仍然指向"hello",所以最后的打印结果是"hello"。这是由于String类型是一种特殊类型的引用类型,对String进行的任何修改,String都会新产生一个对象,存放修改后的String。可以比较一下下面的代码:

import java.util.*;
public class TestDYong {

public static void main(String[] args) {
StringBuffer str=new StringBuffer().append("hello");
change(str);
System.out.println(str);
}

public static void change(StringBuffer str){
str.append("world");
}

}

由于StringBuffer的append并不产生新的对象(区别与String的+产生新对象),所以上面代码打印的是"helloworld"
String类是final类。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值