黑马程序员技术交流社区
标题:
我对String的认识:请各位指正
[打印本页]
作者:
如梦初醒
时间:
2012-4-1 11:47
标题:
我对String的认识:请各位指正
本帖最后由 如梦初醒 于 2012-4-1 11:50 编辑
这几天看了张老师《Java高薪技术》的视频最后一节,我对String有了新的认识,觉得该总结整理一下,于是写了一个程序来测试一下结论。
package cn.itcast.test;
public class testString {
/**
* @author crowndint
* @ 我的对字符串的认识
* *********************************************
* @ == 用来比较两个对象是否是同一个;
* @ equals()在比较Object的时候用来比较
* 这两对象是否是同一个对象,也就是
* Object==Object与Object.equals(Object)等价;
* @ 而对于String则不然,== 用来比较两个字符串是否是
* 同一个对象,equals()用来比较两个字符串的内容是否同一。
* @ 两个对象如果用equals()方法比较返回true,
* 那么着两个对象的散列码一定相同。
* @ 字符串作为变量在拼接的时候,尽管内容相同,但是
* 确生成了不同的对象。
* *********************************************
*/
public static void main(String[] args) {
//str1与str2是两个不同的对象,但是他们都映射到同一块内存区
String str1=new String("crowndint");
String str2=new String("crowndint");
System.out.println(str1.hashCode());
System.out.println(str2.hashCode());
System.out.println("result will false "+str1==str2);
System.out.println("---------------");
//str3与str4是同一个对象
String str3="crown";
String str4="crown";
System.out.println(str3.hashCode());
System.out.println(str4.hashCode());
System.out.println("result will true "+str3==str4);
System.out.println("---------------");
//str5与str6这两个常量将被编译器优化为"crown",所以他们是同一个对象
String str5="crown"+"";
String str6="crown"+"";
System.out.println(str5.hashCode());
System.out.println(str6.hashCode());
System.out.println(str5==str6);
System.out.println("---------------");
String string1="crown";
String string2="";
//string1_2_1与String string1_2_2是两个不同的对象,
//因为string1与string2在拼接的时候成了两个变量
String string1_2_1=string1+string2;
String string1_2_2=string1+string2;
System.out.println(string1_2_1.hashCode());
System.out.println(string1_2_2.hashCode());
System.out.println("the result will be false "+string1_2_1==string1_2_2);
System.out.println("--------------");
String var="itcast";
String fine1="";
String fine2="";
for(int i=0;i<10;i++){
fine1+=var;
}
for(int i=0;i<10;i++){
fine2+=var;
}
System.out.println(fine1.hashCode());
System.out.println(fine2.hashCode());
//变量var在拼接的时候会生成不同的对象
System.out.println("result will false "+fine1==fine2);
}}
运行结果:
1507750466
1507750466
false
---------------
94935223
94935223
false
---------------
94935223
94935223
true
---------------
94935223
94935223
false
--------------
-765301852
-765301852
False
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2