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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zbgl 中级黑马   /  2013-11-19 17:17  /  1670 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

publicclass Test1 {

    public static void changeStr(String str){
        str="welcome";
    }
    public static void main(String[] args) {

        String str="1234";
        changeStr(str);
        System.out.println(str);
    }
}
她结果为什么是1234?

评分

参与人数 1黑马币 +2 收起 理由
To + 2

查看全部评分

7 个回复

倒序浏览
  String类定义的值是不可改变的
回复 使用道具 举报
String str=“1234”,这条语句就相当于给String类的对象“1234”起了个别名叫str,那么str就指向对象“1234”,由于一个指针只能指向一个对象,所以String类的变量值一经赋值就不能再改变了。所以,结果仍然是1234.
回复 使用道具 举报
谢谢!知道了
回复 使用道具 举报
定义字符串str为1234,其实就是str在内存中指向了一个地址,内容为1234,这个指针就只指向这个地址,所以str=“1234”是不会变的
回复 使用道具 举报
我觉得你代码写的有问题啊!!难道运行的时候不提醒错误!!尤其那个函数的调用???
回复 使用道具 举报
zbgl 中级黑马 2013-11-19 19:50:31
7#
代码没问题的
回复 使用道具 举报
先声明了一个String类型的对象str = "welcome",相当于是在堆内存中开辟了一块空间,里面的内容是"welcome"。
然后又在主函数里面什么了一个同名的对象str = "1234";由于String类型的值是不可改变的,所以相当于是又在堆内存中开辟了一块空间,里面的内容是"1234",然后将对象str的由原来指向"welcome"的变成了指向"1234"的堆内存空间。
所以打印出来的结果是1234

评分

参与人数 1技术分 +1 收起 理由
To + 1

查看全部评分

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