Java String 一个简单例子的深思 (对象比较 值相等 相关问题)

只要是学习过Java的人,都一定对String类再熟悉不过了。可是你真的理解了String吗?
下面让我们来做个试验,看你能否全部答对如下的问题(面试时也许你会遇到下面的问题哟,大家要好好回答啊。):


package com.test;

public class StringEx
{
public static void main(String[] args)
{
String s1 = "abc";
String s2 = new String(s1);

if (s1 == s2)
System.out.println("s1 == s2");
if (s1.equals(s2))
System.out.println("s1.equals(s2)");

String s3 = "abc";
if (s1 == s3)
System.out.println("s1 == s3");
if (s1.equals(s3))
System.out.println("s1.equals(s3)");

String s4 = new String("abc");
if (s1 == s4)
System.out.println("s1 == s4");
if (s1.equals(s4))
System.out.println("s1.equals(s4)");
if (s2 == s4)
System.out.println("s2 == s4");
if (s2.equals(s4))
System.out.println("s2.equals(s4)");

if (s1 == "abc")
System.out.println("s1 == \"abc\"");
if (s2 == "abc")
System.out.println("s2 == \"abc\"");
if (s4 == "abc")
System.out.println("s4 == \"abc\"");
}
}



现在请大家自己试着写出程序的运行结果,不要看后面的答案哟...

(答题中...)

好了,答题结束。相信大家现在自己都有了心中的答案。
现在让我们来看下程序实践的运行结果:

s1.equals(s2)
s1 == s3
s1.equals(s3)
s1.equals(s4)
s2.equals(s4)
s1 == "abc"



哈哈,答案公布了,你全都答对了吗?如果你全都答对了,恭喜你,你对String类的理解已经不再是新手了(String的深一步理解,我以后会再写文章来讨论。)。

其实,如果你能将上面的结果全都答对,不仅说明你对String类有了比较深的理解,更说明你对Java对象是如何在内存中存储的,已经有了比较深的理解。

如果有的运行结果和你期待的结果不一致,说明你对对象及对象的值,理解可能出现了歧义。
(Debug一下上面的程序,看看“Variables”窗口那四个变量的ID,你就会明白错在哪儿了)


通过上面一个很简单的例子,说明我们看似很熟悉的东西,其实我们未必很熟悉。因为一个小小的理解错误,可能会导致一个项目中很大的bug,往往这样的bug又很难发现(因为我们经常把这样的bug忽略了)。

希望大家如果还有类似的经验和理解,请不要吝惜您的经验,和大家一起分享,让我们共同进步。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值