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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

代码: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不也是指向同一个对象?不解,求大神解答

6 个回复

倒序浏览
本帖最后由 Hi.。 于 2015-12-23 09:26 编辑

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


不知道说的对不对,请大神指教
回复 使用道具 举报
change方法加载完就弹栈了
你打印的还是主函数中的s
回复 使用道具 举报
青菜市场 来自手机 中级黑马 2015-12-23 08:29:25
板凳
Hi.。 发表于 2015-12-22 23:38
这里要记住两句话,第一句是:java中只有值传递。还有一句是:字符串一旦被赋值,就不可以被改变。
java中 ...

可以在chang方法内加过输出语句打印下str不就知道了么
回复 使用道具 举报
青菜市场 发表于 2015-12-23 08:29
可以在chang方法内加过输出语句打印下str不就知道了么

我以为你main方法中的的字符串 也是str、最后面的str  我指的是s
回复 使用道具 举报
高司令说  java中只有值传递....
回复 使用道具 举报
hard 中级黑马 2015-12-23 17:45:44
7#
final  string
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马