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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 只会金克斯   /  2014-12-29 22:43  /  2630 人查看  /  33 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

按我的理解,形参和实参是两个东西,也就是main中的str和method中的str存在于不同空间。
  1. public static void main(String[] args)throws Exception
  2.         {
  3.                 String str="aaa";
  4.                 method(str);
  5.                 str=str+"ddd";
  6.         }
  7.         private static void method(String str) throws Exception
  8.         {
  9.                 System.out.println(str.hashCode());
  10.                 str=str+"ddd";//当执行str+"ddd"这个动作时,str+"ddd"已经是新的对象,在内存分配了新的地址。
  11.                        //把地址赋给了形参str。
  12.                        //至始至终main中的str根本就没有改变,他一直在指向"aaa"这个字符串对象。
复制代码



回复 使用道具 举报
传递的是一个副本。相当于拷贝一份过去修改。 对原数据没影响
回复 使用道具 举报
青衫禅客 发表于 2014-12-31 21:52
因为String类型的变量一旦赋值就不可更改的,而方法中重新运算出的String是一个新创建的值!注意String是引 ...

恩恩,就是把jvm的底层运算 看作是常量运算吧。。
回复 使用道具 举报
kakasa 发表于 2015-1-1 16:59
按我的理解,形参和实参是两个东西,也就是main中的str和method中的str存在于不同空间。

它们之间传递的不是地址值吗
回复 使用道具 举报
小僧玄奘 发表于 2015-1-1 20:24
传递的是一个副本。相当于拷贝一份过去修改。 对原数据没影响

这样子的话,是解释的通
回复 使用道具 举报
这里没有返回值。
回复 使用道具 举报
只会金克斯 发表于 2015-1-2 21:10
它们之间传递的不是地址值吗

就是地址啊,
str+"ddd"这个动作是创建新对象,分配了新地址,str的地址变了。而且只是形参的地址变了,主函数的没变。

字符串一旦被初始化就不会被改变,意思就是str+"ddd"这个动作,不是在改变本来的对象,而是创建新的对象,新的对象当然要分配新的地址,不是么?

如果你用 StringBuffer初始化成"aaa"后,在method用add方法添加"ddd"话就不一样了,因为这是在对对象本身进行修改,并没有创建别的对象。

把method里的变量名改成别的名字,这样可能更好理解吧,
回复 使用道具 举报
String类型存储在String常量池中,byte数据类型存储在byte常量池中,因为它们使用频率太高了,所以来回的创建效率不高,所以Java中引入了常量池的概念,其中String常量池默认是没字符串的,当你新建字符串的时候字符串就会存入常量池,并且不会改变,等待垃圾回收机制启动收回它。byte常量池是-128~127之间的整数默认存在,直接调用,这是它们之间的小区别。主要是为了提高效率。
回复 使用道具 举报
kakasa 发表于 2015-1-2 21:47
就是地址啊,
str+"ddd"这个动作是创建新对象,分配了新地址,str的地址变了。而且只是形参的地址变了, ...

谢了。。
回复 使用道具 举报
zcyemenye 发表于 2015-1-2 21:59
String类型存储在String常量池中,byte数据类型存储在byte常量池中,因为它们使用频率太高了,所以来回的创 ...

恩恩。。是的,我一开始的理解是,传递地址值过去了以后,就会对堆中的对象进行修改。。。。。。
回复 使用道具 举报
只会金克斯 发表于 2015-1-2 21:11
这样子的话,是解释的通

你百度一下值传递和引用传递。  虽然在java里面没有这个"区分"。
回复 使用道具 举报
小僧玄奘 发表于 2015-1-3 01:58
你百度一下值传递和引用传递。  虽然在java里面没有这个"区分"。

谢了。。。。。
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 加入黑马