黑马程序员技术交流社区

标题: 求大神指导一下关于String类值得传递的问题 [打印本页]

作者: 青菜市场    时间: 2015-12-22 12:22
标题: 求大神指导一下关于String类值得传递的问题
代码:public static void main(String[] args){
          String s = new String("string");
           change(s);
           System.out.println(s);
}
static void change(String str){
          str = str+"类";
}
为什么打印出来的s还是原来的,S不是指向堆内存中的Sting的对象么?str不也是指向同一个对象?不解,求大神解答

作者: Hi.。    时间: 2015-12-22 23:38
本帖最后由 Hi.。 于 2015-12-23 09:26 编辑

这里要记住两句话,第一句是:java中只有值传递。还有一句是:字符串一旦被赋值,就不可以被改变。
java中只有值传递。 关于值传递和引用传递,我的理解就是指,值传递表示,传递的是这个参数的一个副本,方法内的操作,并不会改变参数的本身。
而引用传递,传递的是参数本身,方法内的操作,直接作用于该参数。
java中只有值传递,在基本数据类型中传递的是基本类型的值,在引用类型中,传递的是其地址值。
字符串一旦被赋值,就不可以被改变。 指的是,这个字符串对象本身不会改变,而s的引用,始终是指向了字符串常量池中的“string”, change()的操作,并没有使s有任何改变


不知道说的对不对,请大神指教

作者: 隔壁老猫    时间: 2015-12-23 00:32
change方法加载完就弹栈了
你打印的还是主函数中的s
作者: 青菜市场    时间: 2015-12-23 08:29
Hi.。 发表于 2015-12-22 23:38
这里要记住两句话,第一句是:java中只有值传递。还有一句是:字符串一旦被赋值,就不可以被改变。
java中 ...

可以在chang方法内加过输出语句打印下str不就知道了么
作者: Hi.。    时间: 2015-12-23 09:26
青菜市场 发表于 2015-12-23 08:29
可以在chang方法内加过输出语句打印下str不就知道了么

我以为你main方法中的的字符串 也是str、最后面的str  我指的是s
作者: 鳌少宝    时间: 2015-12-23 13:05
高司令说  java中只有值传递....
作者: hard    时间: 2015-12-23 17:45
final  string




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