Java String 一个简单例子的深思 (对象比较 值相等 相关有关问题)
Java String 一个简单例子的深思 (对象比较 值相等 相关问题)
只要是学习过Java的人,都一定对String类再熟悉不过了。可是你真的理解了String吗?
下面让我们来做个试验,看你能否全部答对如下的问题(面试时也许你会遇到下面的问题哟,大家要好好回答啊。):
现在请大家自己试着写出程序的运行结果,不要看后面的答案哟...
(答题中...)
好了,答题结束。相信大家现在自己都有了心中的答案。
现在让我们来看下程序实践的运行结果:
哈哈,答案公布了,你全都答对了吗?如果你全都答对了,恭喜你,你对String类的理解已经不再是新手了(String的深一步理解,我以后会再写文章来讨论。)。
其实,如果你能将上面的结果全都答对,不仅说明你对String类有了比较深的理解,更说明你对Java对象是如何在内存中存储的,已经有了比较深的理解。
如果有的运行结果和你期待的结果不一致,说明你对对象及对象的值,理解可能出现了歧义。
(Debug一下上面的程序,看看“Variables”窗口那四个变量的ID,你就会明白错在哪儿了)
通过上面一个很简单的例子,说明我们看似很熟悉的东西,其实我们未必很熟悉。因为一个小小的理解错误,可能会导致一个项目中很大的bug,往往这样的bug又很难发现(因为我们经常把这样的bug忽略了)。
希望大家如果还有类似的经验和理解,请不要吝惜您的经验,和大家一起分享,让我们共同进步。
只要是学习过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忽略了)。
希望大家如果还有类似的经验和理解,请不要吝惜您的经验,和大家一起分享,让我们共同进步。