问题总结保存

smallboy_5的专栏

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类。

阅读更多
文章标签: string
想对作者说点什么? 我来说一句

int类型转换时间

2012年12月03日 592B 下载

没有更多推荐了,返回首页

不良信息举报

String类型参数的传值问题

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭