黑马程序员技术交流社区

标题: 继续探讨String传值问题,提供思路 [打印本页]

作者: 到处玩的    时间: 2014-8-6 16:07
标题: 继续探讨String传值问题,提供思路
本帖最后由 到处玩的 于 2014-8-7 08:43 编辑

先上代码:/**
        string传递改变值得问题
        */
class  Demo {
    public static void main(String[] args) {
        String str1 = "abcde";
        String str2 = "abc";
        System.out.println("--main中调用swap之前---str1="+str1.hashCode()+"::"+"str2="+str2.hashCode());
        swap(str1,str2);
        System.out.println("--调用swap之后---str1="+str1+"::"+"str2="+str2);
        //输出结果    str1=abcde::str2=abc
        System.out.println("--调用swap之后---str1="+str1.hashCode()+"::"+"str2="+str2.hashCode());
        if(str1.length()>str2.length()) {
            String temp = str1;
            str1 = str2;
            str2 =  temp;
        }
        System.out.println("main函数中---str1="+str1+"::"+"str2="+str2);
        //输出结果  str1=abc::str2=abcde

    }
    public static void swap(String str1,String str2) {
        System.out.println("wap函数中,还没变化---str1="+str1+"::"+"str2="+str2);
        System.out.println("wap函数中,还没变化---str1="+str1.hashCode()+"::"+"str2="+str2.hashCode());
        if(str1.length()>str2.length()) {
            String temp = str1;
            str1 = str2;
            str2 =  temp;
        }
        System.out.println("wap函数中变化之后---str1="+str1+"::"+"str2="+str2);
         System.out.println("wap函数中变化之后---str1="+str1.hashCode()+"::"+"str2="+str2.hashCode());
    }

}

运行结果:

--main中调用swap之前---str1=92599395::str2=96354
wap函数中,还没变化---str1=abcde::str2=abc
wap函数中,还没变化---str1=92599395::str2=96354
wap函数中变化之后---str1=abc::str2=abcde
wap函数中变化之后---str1=96354::str2=92599395
--调用swap之后---str1=abcde::str2=abc
--调用swap之后---str1=92599395::str2=96354
main函数中---str1=abc::str2=abcde



问题:
本来打算调用api打印不同函数里的String变量地址,但是很多人说java不允许操作内存地址,然后找到说是一个object对象有唯一的hashcode,想着便用hashcode来判断变量到底变了没,结果居然是变化了。
那到底是我理解的知识点有问题呢,但是这个东西需要一个有力的解释,那么怎么设计一个这个例子呢?






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