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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 如梦初醒 中级黑马   /  2012-4-1 11:47  /  1439 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 如梦初醒 于 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

0 个回复

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