`
Ericy0713
  • 浏览: 2057 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
最近访客 更多访客>>
社区版块
存档分类
最新评论

通过String类展示==和equals的透析

阅读更多
package com.basic;

public class StringCompare {
	// String类是一个比较特殊的类,
	// 在类加载的时候所有的string都被放进了running string pool。
	public static void stringTestCompare() {

		// 实际上Object类的equals()和==在比较引用类型的对象的时候是一样的, 两则都是比较两个对象的虚地址(引用值);
		// 不过Object类的equals()可以被子类覆盖,从而表现出不同的比较形式及比较结果(比如String类的equals());
		// == 在比较基本数据类型是:实质上是比较两个数据的二进制值。

		// 使用new实例化String对象的过程:
		// new一个String对象,JVM会在JAVA堆中分配一个空间,
		// 然后在去string running pool里是否有这个string,
		// 如果存在该string,就直接把该string的引用存在String对象在JAVA堆的空间中,
		// 如果不存在该string,就在string running pool创建该string,
		// 再把该string的引用存在String对象在JAVA堆的空间中。
		String s1 = new String("asdf");
		String s2 = new String("asdf");
		// 直接给String对象赋值的过程:
		// 给String类对象直接赋值,JVM会去寻找string running pool里是否有这个string,
		// 如果存在该string,就直接把该string的引用给该String对象,
		// 如果不存在该string,就在string running pool创建该string。
		String s3 = "asdf";
		String s4 = "asdf";

		System.out.println("比较两个new实例出来的String:");
		// == 是比较两个new出来的String的虚地址
		System.out.println("s1==s2 -> " + (s1 == s2));
		// String类的equals()是比较两个new出来的String的所包含的的值(重写了Object类的equals())
		System.out.println("s1.equals(s2) -> " + (s1.equals(s2)));
		System.out.println("比较两个直接赋值的String:");
		// 了解了String对象的直接赋值过程,就能明白两个直接赋值的String对象的比较了
		System.out.println("s3==s4 -> " + (s3 == s4));
		System.out.println("s3.equals(s4) -> " + (s3.equals(s4)));
	}

	public static void main(String[] args) {
		StringCompare.stringTestCompare();
	}
}
分享到:
评论

相关推荐

    String中==与equals区别验证

    在Java编程语言中,`==` 运算符与 `equals()` 方法被广泛用于比较对象,尤其是当处理字符串(`String` 类)时。这两者之间的区别是理解Java内存管理和对象引用的关键。以下是对给定代码片段中所展示概念的详细解析。...

    ==和equals的区别

    Java 中的 == 和 equals 方法的区别 在 Java 中,比较值大小有两种方法:== 和 equals,这两个方法的使用场景和比较规则不同,下面我们将详细探讨它们的区别。 基本数据类型和引用数据类型 在 Java 中,有两种...

    ==运算符和Equals()方法区别

    例如,在上面的例子中,`string a`和`string b`都是值类型,它们的比较结果都是`true`,因为它们的值是一样的。 但是,对于引用类型来说,`==`运算符和`Equals()`方法的行为就不同了。`==`运算符会比较两个对象的...

    字符串比较之 “==”和 “equals”

    此外,String类还有一个与"equals()"相关的静态方法"compareTo()",它基于Unicode值对字符串进行字典顺序比较。如果两个字符串完全相等,"compareTo()"将返回0;如果第一个字符串小于第二个,返回负数;如果大于,则...

    Java基础复习(内附String中equals与==区别的分析)

    本篇复习将重点讨论String类中的`equals()`方法和`==`运算符的区别,这对于理解对象比较和字符串操作至关重要。 首先,`==`运算符在Java中用于比较基本类型(如int、char)的值,而在比较对象时,它实际上是检查两...

    ==和equals方法究竟有什么区别

    但是,许多类(尤其是String、Integer等)都重写了`equals()`方法,以便比较对象的内容而不是引用。例如,在String类中,`equals()`方法会比较两个字符串的字符序列是否相同,而不关心它们是否是同一个对象实例。...

    Java中的==和equals区别

    然而,在许多情况下,特别是对于自定义类或Java标准类库中的类(如`String`、`Integer`等),`equals`方法被重写来比较对象的实际内容。 ##### 示例: ```java String str1 = "hello"; String str2 = "hello"; ...

    ==与equals的比较

    在Java中,`String`类 overrides 了`equals`方法,以便比较字符串的内容,而不是引用地址。因此,当我们需要比较字符串的内容时,应该使用`equals`方法,而不是`==`运算符。 在Java中,`==`运算符和`equals`方法...

    == and equals() 的比较 绝对值得看

    以`String`类为例,来看`==`和`equals()`的具体应用: 1. 当两个`String`引用指向内存中相同的字符串常量池中的对象时,`==`会返回`true`。例如: ```java String s1 = "Monday"; String s2 = "Monday"; ``` 在这个...

    ==和equals的比较

    C# 中的 == 和 equals 比较 在 C# 编程语言中,`==` 和 `equals` 是两个常用的比较运算符,但它们之间有很大的区别。 堆和栈的区别 在理解 `==` 和 `equals` 之前,我们需要了解堆和栈的区别。堆是一种动态分配的...

    java中equals和==的区别

    String 中的 equals 和 == 还有更多的细节。下面是一个简单的示例程序: public class TestString { public static void main(String[] args) { String s1 = "Monday"; String s2 = "Monday"; if (s1 == s2) ...

    简单介绍java中的“==”和equals

    简单介绍java中的“==”和equals

    java基础之 “==”与“equals”区别详解

    "java基础之“==”与“equals”区别详解" 根据java基础之“==”与“equals”区别详解,以下是相关知识...学习java基础之“==”与equals()需要充分理解它们的区别和应用场景,并且需要通过实践和练习来熟悉它们的使用。

    java中的==和equals()方法1

    在Java编程语言中,了解如何正确使用`==`和`equals()`方法是非常关键的,因为它们在比较对象和基本类型时有不同的...在处理对象比较时,一定要考虑到这些差异,特别是当涉及到自定义类和已重写`equals()`方法的类时。

    String a="hello" String b="hello" a==b 返回true的问题分析

    通过上面的讲解可以知道,a和b都是指向常量池的同一个常量字符串"hello world"的,因此它们返回的地址是相同的。a和b都是引用类型,相当于c语言里面的指针。java里面没有指针的概念,但是实际上引用变量里面放的确实...

    浅析C#中的等号“==”和Equals

    1.“==”和Equals两个真的有关联吗?  对于“==”和Equals大多数网友都是这样总结的:  “==” 是比较两个变量的值相等。  Equals是比较两个变量是否指向同一个对象。  public class Person  {  public ...

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

    但是,对于大多数非原始类型的类(如String、Integer等),equals()通常会重写以比较对象的属性值。例如,在String类中: ```java String str1 = new String("Hello"); String str2 = new String("Hello"); System....

    java中==和equals的区别

    对于开发的程序员小伙伴,大家肯定对于==和equals不陌生,而且会经常用到他,那么又有几个能够说清楚了==和equals是怎么回事呢?他了呢两个有什么区别呢? 比较 == 比较的是栈中的值,基本数据类型是变量值,引用...

    ==代替Object#equals() - 加速在容器类中搜索元素速度的可能性

    这篇博客"代替Object#equals() - 加速在容器类中搜索元素速度的可能性"探讨了如何通过优化这个方法来提升在集合中的查找效率。 在默认情况下,`Object#equals()`方法只是简单地比较两个对象的引用,如果它们指向...

    C#中的 == 和equals()区别浅析

    此外,`Equals()`方法有多个重载版本,包括`Equals(object)`和`Equals(T)`(其中T是类或结构的类型)。`Equals(object)`是`Object`类的版本,它接受一个`object`类型的参数并进行装箱操作,而`Equals(T)`则直接接受...

Global site tag (gtag.js) - Google Analytics