`
yhz61010
  • 浏览: 551231 次
  • 来自: -
博客专栏
63c13ecc-ef01-31cf-984e-de461c7dfde8
libgdx 游戏开发
浏览量:11977
社区版块
存档分类
最新评论

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

    博客分类:
  • Java
阅读更多
只要是学习过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
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics