以前是C的,现在自学JAVA, 在论坛上找了一圈,只看到这里好象是JAVA的论坛,但是都是高深的问题,问个简单的,希望能有以教我谢谢。 String str1, str2;
str1 = "Free the bound periodicals.";
str2 = "Free the bound periodicals."; System.out.println("String1: " + str1);
System.out.println("String2: " + str2);
System.out.println("Same object? " + (str1 == str2));这个如果是在C里面应该是FALSE,因为两个字串本身地址不同,而且复制内容不能是“str1=str2”。但这样一段,JAVAC后JAVA,系统输出是 Same object? true
我是应该理解为哪一种呢:1, JAVA把两个字符串指向另一存储“Free the bound periodicals.”的空间地址,“str1==str2”是判断两者指向相同空间地址
2, JAVA把两个字符串指向另一存储“Free the bound periodicals.”的空间地址,“str1==str2”是判断两个字串内容相同
3, JAVA自动优化把其中一个字串指向另一个,判断两个字串最终指向相同地址
4, JAVA自动优化其中一个字串为另一个字串的别名,两个字串内存中地址相同
5, JAVA自动优化其中一个字串为另一个字串的别名,两个字串内存相同喔米托佛 惭愧得很 善载 善载
str1 = "Free the bound periodicals.";
str2 = "Free the bound periodicals."; System.out.println("String1: " + str1);
System.out.println("String2: " + str2);
System.out.println("Same object? " + (str1 == str2));这个如果是在C里面应该是FALSE,因为两个字串本身地址不同,而且复制内容不能是“str1=str2”。但这样一段,JAVAC后JAVA,系统输出是 Same object? true
我是应该理解为哪一种呢:1, JAVA把两个字符串指向另一存储“Free the bound periodicals.”的空间地址,“str1==str2”是判断两者指向相同空间地址
2, JAVA把两个字符串指向另一存储“Free the bound periodicals.”的空间地址,“str1==str2”是判断两个字串内容相同
3, JAVA自动优化把其中一个字串指向另一个,判断两个字串最终指向相同地址
4, JAVA自动优化其中一个字串为另一个字串的别名,两个字串内存中地址相同
5, JAVA自动优化其中一个字串为另一个字串的别名,两个字串内存相同喔米托佛 惭愧得很 善载 善载
str2 = "Free the bound periodicals."; 修改为str1 = new String("Free the bound periodicals.");
str2 = new String("Free the bound periodicals.");结果就不一样了,Java的入门教材中会提到这些
怎么才能取两个INT变量的地址出来判断呢?
http://blog.csdn.net/sunyujia/archive/2007/11/17/1889779.aspx
觉得楼主很谦虚,我很欣赏您的问问题的方式,应该是个优秀的程序员
所以当有大量字符操作的时候建议用StringBuffer......
JVM对String进行了一定的优化,当出现两个内容相同的String的时候,他可能会像3楼说的那样,但并不总是能优化,所以比较String的时候总是用equals方法,当然你测试了玩是另一回事
任何对String的修改,都会重新生成新的字符串。