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

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
分享到:
评论

相关推荐

    Java中String判断值为null或空及地址是否相等的问题

    接下来,我们来看一个简单的例子,展示了如何正确地检查字符串是否为`null`或空值: ```java public class Test { public static void main(String[] args) { String value = null; testNullOrEmpty(value); ...

    java String 使用详解

    首先比较两个字符串的第一个字符,如果第一个字符串的字符编码大于第二个的字符串的字符编码,则返回大于 0 的值,如果小于则返回小于 0 的值,如果相等则比较后续的字符,如果两个字符串中的字符编码完全相同则返回...

    Java中颜色的String和Color对象之间的互相转换

    Java 中颜色的 String 和 Color 对象之间的互相转换 在 Java 中,颜色的表示形式有多种,包括字符串形式和 Color 对象形式。这两种形式可以互相转换,本文将介绍 Java 中颜色的 String 和 Color 对象之间的互相转换...

    Java String对象的经典问题

    ### Java String对象的经典问题 #### 一、String 类与对象机制概述 在Java中,`String`类是一个非常重要的类,它提供了丰富的功能用于处理文本数据。`String`类是不可变的(immutable),这意味着一旦一个`String`...

    Java对象属性数据比较,返回变化数据

    `PriceCheckDetail.java`可能是`ObjectCompareUtil`的一个使用示例,它可能定义了一个`PriceCheckDetail`类,并在某个业务逻辑中调用`compareObjects()`方法来比较两个`PriceCheckDetail`对象,以便找出价格检查细节...

    java的JsonObject对象提取值方法

    在Java编程中,`JsonObject` 是用来处理JSON数据的一个关键对象。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛应用于网络通信及数据存储。本篇将详细介绍如何在Java中使用`JsonObject`来...

    Java常见笔试、面试题目深度剖析 相等性(==及equals方法)详解

    而equals()方法则是Object类的一个成员方法,用于比较对象的内容是否相等。默认情况下,它只是简单地检查引用是否相同,即与“==”行为一致。但是,对于大多数非原始类型的类(如String、Integer等),equals()通常...

    JAVA中实现“相等”比较的深入分析.pdf

    为了更清晰地阐述Java对象相等比较的深入知识,我们可以用一个例子说明。假设有一个Point类,它有两个成员变量x和y,用来表示一个点在二维空间的位置。如果我们想比较两个Point对象是否相等,我们会在Point类中重写...

    java中Object对象String对象的解析.pdf

    使用字面值赋值方式创建的 String 对象会被存储在 String 池中, String 池是一个特殊的存储区域,用于存储字符串常量。使用 new 关键字创建的 String 对象则会被存储在堆中。 在比较 String 对象时,需要使用 ...

    java String类常用方法练习小结

    `compareTo`是`String`类的一个方法,它根据Unicode值比较两个字符串。如果第一个字符串大于第二个字符串,`compareTo`返回正整数;如果两个字符串相等,返回0;如果第一个字符串小于第二个字符串,则返回负整数。在...

    java计算同一个list中是否有相同的值

    在 Java 编程中,判断一个 `List` 中是否存在重复元素是一项常见的需求。特别是在数据处理、验证或分析等场景中,确保数据的唯一性对于维持数据完整性至关重要。 #### 核心概念解析 在给定的代码片段中,作者提供...

    java基础String类选择题练习题

    - **例题**:例如,题目可能询问“以下哪个方法用于比较两个字符串的值是否相等?”选项中会包含`==`、`equals()`等选项。 #### 3. 字符串操作方法 - **知识点**:介绍`String`类中常用的字符串操作方法,如`concat...

    java中String类型和int类型比较及相互转换

    在Java中,直接比较一个String类型的值与一个int类型的值是非法的,因为它们属于不同的数据类型。若要进行比较,必须先进行类型转换。 #### 2.1 使用compareTo方法比较String类型 对于两个String类型的比较,可以...

    我们一起学Java之String

    Java中的String类是一个重要的数据类型,用于存储和操作字符串数据。String类的特点是不可变性,也就是说,一旦String对象被创建,其值就无法改变。这一特性对于Java内存管理有着重要影响,因为String对象会存储在...

    JAVA面试题解惑系列(二)——到底创建了几个String对象-JAVA程序员JAVA工程师面试必看.pdf,这是一份不错的文件

    当我们创建一个 String 对象时,JAVA 虚拟机(JVM)首先会在字符串池中查找是否已经存在了该对象,如果存在,则不再创建新的对象,直接返回已存在对象的引用;如果不存在,则创建新的对象,并将其加入字符串池中。 ...

    StringUtil.java

    java编程中对字符串的各种方式的处理,包括(空字符串处理、判断是否是空字符串 null和"" 都返回 true、 把string array or list用给定的符号symbol连接成一个字符串、 判定第一个字符串是否等于的第二个字符串中的某...

    Java 之 String 类型

    例如,`String str = "Hello"` 创建了一个字符串对象。 - 因为不可变性,每次对字符串进行修改(如使用`concat()`或`substring()`),都会生成新的字符串对象,这在处理大量字符串操作时需要注意性能影响。 2. **...

    java String 数据结构

    这是因为`String`在Java中被实现为一个特殊的类,存储在一个连续的字符数组中,这个特性对于理解它的内部工作原理以及如何有效地使用它至关重要。下面将详细探讨`String`类的数据结构、常用方法以及适用于初学者的...

    86.java中String对象的特点.zip

    86.java中String对象的特点.zip86.java中String对象的特点.zip86.java中String对象的特点.zip86.java中String对象的特点.zip86.java中String对象的特点.zip86.java中String对象的特点.zip86.java中String对象的特点....

Global site tag (gtag.js) - Google Analytics