黑马程序员技术交流社区

标题: 关于String的一个题目 [打印本页]

作者: 疯狂的麦克斯    时间: 2016-9-22 21:43
标题: 关于String的一个题目
[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
谁给讲讲。。。

作者: lipeng518    时间: 2016-9-22 22:14
虽然是引用数据类型,但是他是放在常量池的/好像传递参数不会改变实参的数值.不知道你听不听的懂
作者: 醉醒    时间: 2016-9-22 22:16
main方法进栈,s1指向常量池 "123",s2 指向 "456",然后show进栈,show方法的s1指向常量池中的s2 + s1 + "a",s2指向了"b" + s1,方法做完后,弹栈出去了,该方法中的s1和s2也消失了,剩下的则是main方法的s1和s2

作者: 18001105207    时间: 2016-9-22 22:53
main方法里的s1.s2和show方法里的s1.s2没关系。show(s1,s2)只是将值传了出去,不会改变其值
作者: 疯狂的麦克斯    时间: 2016-9-23 23:53
lipeng518 发表于 2016-9-22 22:14
虽然是引用数据类型,但是他是放在常量池的/好像传递参数不会改变实参的数值.不知道你听不听的懂 ...

一脸蒙蔽
作者: 疯狂的麦克斯    时间: 2016-9-23 23:55
醉醒 发表于 2016-9-22 22:16
main方法进栈,s1指向常量池 "123",s2 指向 "456",然后show进栈,show方法的s1指向常量池中的s2 + s1 + "a",s ...

了解,明了了
作者: 疯狂的麦克斯    时间: 2016-9-23 23:56
18001105207 发表于 2016-9-22 22:53
main方法里的s1.s2和show方法里的s1.s2没关系。show(s1,s2)只是将值传了出去,不会改变其值 ...

懂了懂了
作者: 我就是那匹黑黑    时间: 2016-9-24 00:26
学习下,谢楼主分享
作者: yu244934256    时间: 2016-9-24 00:27
局部变量属于方法中,方法调用完,就释放。如果用this区分局部变量和成员变量,值就是你想要的了。可是他是静态的,永远不会得到你认为的值





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2