黑马程序员技术交流社区

标题: 解释 [打印本页]

作者: zbgl    时间: 2013-11-19 17:17
标题: 解释
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?


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




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