A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 玉遥 中级黑马   /  2014-7-4 10:55  /  1287 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public static void main(String[] args) {
  String s = "hello";
  change(s);
  System.out.println(s); //hello
  StringBuffer sb = new StringBuffer("hello");
  change(sb);
  System.out.println(sb); //helloworld
}
public static void change(String s) {
  s += "world";
}
public static void change(StringBuffer sb) {
  sb.append("world");
}
此程序结果为
hello
helloworld
强制解释:引用类型作为参数:形式参数的改变直接影响实际参数。字符串除外。
字符串除外原理在哪里?
原来:在main方法中的s变量在栈内存开辟空间指向方法区的常量池中的“hello”,当调用方法传入参数时,传入的是hello的地址值,方法中的s变量也在栈内存
有一个空间指向hello的地址值,运行s+="world",则在方法区的常量池又开了个空间存放helloworld,方法中的S指向这个空间地址值,main方法中的s指向的还
是原来的地址值也就是hello,所以不影响实际参数。

2 个回复

倒序浏览
学习了...加油!:)
回复 使用道具 举报
学习了...加油!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马