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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 到处玩的 中级黑马   /  2014-8-6 16:07  /  870 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 到处玩的 于 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来判断变量到底变了没,结果居然是变化了。
那到底是我理解的知识点有问题呢,但是这个东西需要一个有力的解释,那么怎么设计一个这个例子呢?

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马