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();
}
}
分享到:
相关推荐
在Java编程语言中,`==` 运算符与 `equals()` 方法被广泛用于比较对象,尤其是当处理字符串(`String` 类)时。这两者之间的区别是理解Java内存管理和对象引用的关键。以下是对给定代码片段中所展示概念的详细解析。...
Java 中的 == 和 equals 方法的区别 在 Java 中,比较值大小有两种方法:== 和 equals,这两个方法的使用场景和比较规则不同,下面我们将详细探讨它们的区别。 基本数据类型和引用数据类型 在 Java 中,有两种...
例如,在上面的例子中,`string a`和`string b`都是值类型,它们的比较结果都是`true`,因为它们的值是一样的。 但是,对于引用类型来说,`==`运算符和`Equals()`方法的行为就不同了。`==`运算符会比较两个对象的...
此外,String类还有一个与"equals()"相关的静态方法"compareTo()",它基于Unicode值对字符串进行字典顺序比较。如果两个字符串完全相等,"compareTo()"将返回0;如果第一个字符串小于第二个,返回负数;如果大于,则...
本篇复习将重点讨论String类中的`equals()`方法和`==`运算符的区别,这对于理解对象比较和字符串操作至关重要。 首先,`==`运算符在Java中用于比较基本类型(如int、char)的值,而在比较对象时,它实际上是检查两...
但是,许多类(尤其是String、Integer等)都重写了`equals()`方法,以便比较对象的内容而不是引用。例如,在String类中,`equals()`方法会比较两个字符串的字符序列是否相同,而不关心它们是否是同一个对象实例。...
然而,在许多情况下,特别是对于自定义类或Java标准类库中的类(如`String`、`Integer`等),`equals`方法被重写来比较对象的实际内容。 ##### 示例: ```java String str1 = "hello"; String str2 = "hello"; ...
在Java中,`String`类 overrides 了`equals`方法,以便比较字符串的内容,而不是引用地址。因此,当我们需要比较字符串的内容时,应该使用`equals`方法,而不是`==`运算符。 在Java中,`==`运算符和`equals`方法...
以`String`类为例,来看`==`和`equals()`的具体应用: 1. 当两个`String`引用指向内存中相同的字符串常量池中的对象时,`==`会返回`true`。例如: ```java String s1 = "Monday"; String s2 = "Monday"; ``` 在这个...
C# 中的 == 和 equals 比较 在 C# 编程语言中,`==` 和 `equals` 是两个常用的比较运算符,但它们之间有很大的区别。 堆和栈的区别 在理解 `==` 和 `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()`方法是非常关键的,因为它们在比较对象和基本类型时有不同的...在处理对象比较时,一定要考虑到这些差异,特别是当涉及到自定义类和已重写`equals()`方法的类时。
通过上面的讲解可以知道,a和b都是指向常量池的同一个常量字符串"hello world"的,因此它们返回的地址是相同的。a和b都是引用类型,相当于c语言里面的指针。java里面没有指针的概念,但是实际上引用变量里面放的确实...
1.“==”和Equals两个真的有关联吗? 对于“==”和Equals大多数网友都是这样总结的: “==” 是比较两个变量的值相等。 Equals是比较两个变量是否指向同一个对象。 public class Person { public ...
但是,对于大多数非原始类型的类(如String、Integer等),equals()通常会重写以比较对象的属性值。例如,在String类中: ```java String str1 = new String("Hello"); String str2 = new String("Hello"); System....
对于开发的程序员小伙伴,大家肯定对于==和equals不陌生,而且会经常用到他,那么又有几个能够说清楚了==和equals是怎么回事呢?他了呢两个有什么区别呢? 比较 == 比较的是栈中的值,基本数据类型是变量值,引用...
这篇博客"代替Object#equals() - 加速在容器类中搜索元素速度的可能性"探讨了如何通过优化这个方法来提升在集合中的查找效率。 在默认情况下,`Object#equals()`方法只是简单地比较两个对象的引用,如果它们指向...
此外,`Equals()`方法有多个重载版本,包括`Equals(object)`和`Equals(T)`(其中T是类或结构的类型)。`Equals(object)`是`Object`类的版本,它接受一个`object`类型的参数并进行装箱操作,而`Equals(T)`则直接接受...