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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

public class CountDemo {
        public static void main(String[] args) {
               
        String s = new String("adc");
        method(s);
        System.out.println(s);
        }
        public static  void  method(String s)
        {
                s =  s+"aaa";
                //System.out.println(s);
        }
}
能不能有大神 给我说下原理是什么??

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 淡定

查看全部评分

33 个回复

倒序浏览
。。。。。。。。。。。路过
回复 使用道具 举报
lixing123456 发表于 2014-12-29 22:54
。。。。。。。。。。。路过

大神,原理是啥子,
回复 使用道具 举报
大神呢。。。。。。
回复 使用道具 举报
常强儿 来自手机 中级黑马 2014-12-29 23:15:55
报纸
string这样子只是在变引用,而原来的是不变的,要是stringbuilder,使用append肯定就变了
回复 使用道具 举报
刚学没多久,说一下愚见。
看图

点评

抓到了一只大神  发表于 2014-12-30 23:38

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

回复 使用道具 举报
不知道你是否能看懂我发的图?
回复 使用道具 举报
Java中方法参数传递是值传递
回复 使用道具 举报
Eagle 高级黑马 2014-12-30 08:15:52
9#
       String s = new String("adc");
       s = method(s);
        System.out.println(s);
        }
        public static  String method(String s)
        {
                s =  s+"aaa";
                //System.out.println(s);
                return s;
        }

楼主你这样打印试试,
因为你s=s+“aaa”是传进来的,没有赋值到外面的参数。
与主函数里的s无关。
回复 使用道具 举报
因为String类是被fianl修饰的,字符串是常量;它们的值在创建之后不能更改,String s = new String("abc");而且你这样是创建了两个字符串,一个是空字符串 一个是abc字符串,如果你要对字符串进行更改,单线程就要用StringBuilder 不同步的,多线程就要用StringBuffer 是同步的, 我是这样理解 ,不知道能不能帮到你
回复 使用道具 举报 1 0
图画的很形象,已收藏
回复 使用道具 举报
太吊了,学习了。
回复 使用道具 举报
赵涛涛 发表于 2014-12-29 23:19
不知道你是否能看懂我发的图?

没有看懂。{:3_46:}
回复 使用道具 举报
杨佳名 发表于 2014-12-30 01:07
Java中方法参数传递是值传递

如果传递的是引用对象,传递的不是地址值吗?

点评

地址值也是值传啊 java只有值传递  发表于 2014-12-31 23:45
回复 使用道具 举报
Eagle 发表于 2014-12-30 08:15
String s = new String("adc");
       s = method(s);
        System.out.println(s);

这个return。。。。看来我还是没有理解。
回复 使用道具 举报
xiao飞 发表于 2014-12-30 11:12
因为String类是被fianl修饰的,字符串是常量;它们的值在创建之后不能更改,String s = new String("abc"); ...

学渣想问问,空字符是怎么创建的
回复 使用道具 举报
ooooooooooooooooooooo
回复 使用道具 举报
本帖最后由 青衫禅客 于 2014-12-31 22:19 编辑

因为String类型的变量一旦赋值就不可更改的,而方法中重新运算出的String是一个新创建的值!注意String是引用数据类型的!这是我自己的总结:
  基本数据类型:传入方法中的是变量代表的数值本身,所以对原成员变量没有影响

引用数据类型:在传入方法中的时候,传入的是数据实际的内存地址值。所以对原成员变量有影响。

String类型(特殊的引用数据类型):String类型的变量一旦赋值就不可更改,可以看做是一个常量。传入方法中运算,对原成员变量没有影响。

回复 使用道具 举报
Eagle 高级黑马 2014-12-31 23:35:26
19#
只会金克斯 发表于 2014-12-31 19:41
这个return。。。。看来我还是没有理解。

就是将改变的s返回。让主函数里的s接收返回的值
回复 使用道具 举报
曾经写过注释,不过没了,不过可以告诉你是因为他们操作的地址是不一样的.
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马