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