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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 疯狂的麦克斯 中级黑马   /  2016-9-22 21:43  /  1133 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

[AppleScript] 纯文本查看 复制代码
public class Test1 {
	public static void main(String[] args) {
		String s1 = "123";
		String s2 = "456";
		show(s1, s2);
		System.out.println(s1 + "---" + s2);
	}

	private static void show(String s1, String s2) {
		s1 = s2 + s1 + "a";
		s2 = "b" + s1;
	}
}



结果为:123---456
谁给讲讲。。。

8 个回复

倒序浏览
虽然是引用数据类型,但是他是放在常量池的/好像传递参数不会改变实参的数值.不知道你听不听的懂
回复 使用道具 举报
main方法进栈,s1指向常量池 "123",s2 指向 "456",然后show进栈,show方法的s1指向常量池中的s2 + s1 + "a",s2指向了"b" + s1,方法做完后,弹栈出去了,该方法中的s1和s2也消失了,剩下的则是main方法的s1和s2
回复 使用道具 举报
main方法里的s1.s2和show方法里的s1.s2没关系。show(s1,s2)只是将值传了出去,不会改变其值
回复 使用道具 举报
lipeng518 发表于 2016-9-22 22:14
虽然是引用数据类型,但是他是放在常量池的/好像传递参数不会改变实参的数值.不知道你听不听的懂 ...

一脸蒙蔽
回复 使用道具 举报
醉醒 发表于 2016-9-22 22:16
main方法进栈,s1指向常量池 "123",s2 指向 "456",然后show进栈,show方法的s1指向常量池中的s2 + s1 + "a",s ...

了解,明了了
回复 使用道具 举报
18001105207 发表于 2016-9-22 22:53
main方法里的s1.s2和show方法里的s1.s2没关系。show(s1,s2)只是将值传了出去,不会改变其值 ...

懂了懂了
回复 使用道具 举报
学习下,谢楼主分享
回复 使用道具 举报
局部变量属于方法中,方法调用完,就释放。如果用this区分局部变量和成员变量,值就是你想要的了。可是他是静态的,永远不会得到你认为的值
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马