字符串比较问题(java)

来源:互联网 发布:安徽网络电视台客户端 编辑:程序博客网 时间:2024/05/01 04:02

1.非new的比较
String strA = "123";
String strB = "123";
if (strA == strB)
   System.out.println("equal");
else
   System.out.println("not equal!");
//结果是输出equal,这个大家一目了然,但真正的含义是什么那,我个人分析如下:
String strA----->在内存申请了一个空间,比如地址是0xFFFF1,0xFFFF1的内容是存储"123"的地址,
比如"123"的地址是0x56863;
那么String strB ---->在内存也申请了一个空间,比如地址是0xFFFFE,,0xFFFFE的内容也是存储"123"的地址(0x56863)
换句话说是strA, strB指向了同一个地址。

那么strA == strB 比较的内容是 0x56863 == 0x56863,很显然是相等的。也就是说String strA = "123";这句执行后123被
分配了内存,String strB = "123";就不再被分配了。

如下图

strA(0xFFFF1)      "123"(0x56863)         strB(0xFFFFE)
----------          -----------          ----------
| 0x56863| -------->|   "123"  |<--------| 0x56863 |
----------          -----------          ----------

 

2.new的比较
String strA = new String("123");
String strB = new String("123");
if (strA == strB)
   System.out.println("equal");
else
   System.out.println("not equal!");
//结果是输出not equal!

从1的比较大家可以看出 两次的new String("123"); strA所指向的内存地址与strB所指向的内存地址是不同的
如下图所示,存储123的地址分别是0x56863和0x56234。那么此时strA == strB的比较也就是0x56863 == 0x56234
的比较,所以输出的结果是not equal!


strA(0xFFFF1)      "123"(0x56863)
----------          -----------
| 0x56863| -------->|   "123"  |
----------          -----------

strB(0xFFFFE)      "123"(0x56234)
----------          -----------
| 0x56234| -------->|   "123"  |
----------          -----------

 

3.赋值后的比较
String strA = new String("123");
String strB = strA;
if (strA == strB)
   System.out.println("equal");
else
   System.out.println("not equal!");
//结果是输出equal!
strB没有创建新的对象,strA的内容(地址)被拷贝到了strB,使它们指向同一个对象123.
strA的内容是0x56863。
如下图所示

strA(0xFFFF1)      "123"(0x56863)         strB(0xFFFFE)
----------          -----------          ----------
| 0x56863| -------->|   "123"  |<--------| 0x56863 |
----------          -----------          ----------


***希望大家再做比较操作的时候还是用equal比较好***


今天这个问题的个人说明就到这里了。如有问题请给予指正,谢谢。希望对大家有所帮助。


      我是民工,我怕谁。

原创粉丝点击