首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java:为什么可以用==证明String等式?

Java中的==运算符用于比较两个对象的内存地址,而不是它们的值。对于基本数据类型(如int、char、boolean等),==运算符比较的是它们的值是否相等。但是对于对象(如String),==运算符比较的是它们的引用是否指向同一个对象。

在Java中,String对象是不可变的,这意味着一旦创建了一个String对象,它的值就不能被改变。因此,当我们使用==运算符比较两个String对象时,如果它们的值相等,那么它们指向的对象就是同一个。

例如:

代码语言:java
复制
String s1 = "hello";
String s2 = "hello";
String s3 = new String("hello");

System.out.println(s1 == s2); // true
System.out.println(s1 == s3); // false

在上面的例子中,s1s2指向的是同一个String对象,因此它们的==运算结果为true。但是s3指向的是一个新的String对象,它的值与s1s2相等,但它们指向的对象不是同一个,因此它们的==运算结果为false

总之,在Java中,我们可以使用==运算符来比较String对象是否相等,但是需要注意它们指向的对象是否同一个。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

聊聊JAVAString为什么不可变

我觉得到这里各位小伙们应该就知道为什么String不可变了,戴了个final的帽子,官方注释说明创建后不能被改变,但是为什么String要使用final修饰呢?...{ String a = "abc"; String b = "abc"; String c = new String("abc");...回到代码本来来说,因为String太过常用,JAVA类库的设计者在实现时做了个小小的变化,即采用了享元模式,每当生成一个新内容的字符串时,他们都被添加到一个共享池中,当第二次再次生成同样内容的字符串实例时...需要说明一点的是,在object中,equals()是用来比较内存地址的,但是String重写了equals()方法,用来比较内容的,即使是不同地址,只要内容一致,也会返回true,这也就是为什么a.equals...总结 了解到String是不可变的,知道了常量池是怎么个东西。 重温了面试题,有兴趣的小伙伴也可以去阅读下String的源码,浩浩荡荡的3000+。

40110
  • 聊聊JAVAString为什么不可变

    我觉得到这里各位小伙们应该就知道为什么String不可变了,戴了个final的帽子,官方注释说明创建后不能被改变,但是为什么String要使用final修饰呢?...{ String a = "abc"; String b = "abc"; String c = new String("abc");...回到代码本来来说,因为String太过常用,JAVA类库的设计者在实现时做了个小小的变化,即采用了享元模式,每当生成一个新内容的字符串时,他们都被添加到一个共享池中,当第二次再次生成同样内容的字符串实例时...需要说明一点的是,在object中,equals()是用来比较内存地址的,但是String重写了equals()方法,用来比较内容的,即使是不同地址,只要内容一致,也会返回true,这也就是为什么a.equals...总结 了解到String是不可变的,知道了常量池是怎么个东西。 重温了面试题,有兴趣的小伙伴也可以去阅读下String的源码,浩浩荡荡的3000+。

    774190

    Java基础查漏补缺:String为什么不可修改

    但是为什么呢? 原来String对象只是一个引用,每次新建一个String对象s,编译器都会去堆中的字符串常量池中寻找有没有要匹配的字符串,有就s指向它;没有就新建一个字符串,然后s指向它。...用几个图辅助解释一下: 1.声明String对象 String s = “abcd”; 2.将一个字符串变量赋值给另一个String变量 String s2 = s; 可以看到,每次新建一个字符串变量时...这就解释了为什么String是不可修改的,因为修改的只是String的引用指向的地址,字符串常量本身是不会变的。 存在即合理。String内容不可修改有什么好处呢?...一般地,在程序运行过程中,如果需要的创建一个string,CLR会根据这个string的Hash Code试着在Hash table中找这个相同的string,如果找到,则直接把找到的string的地址赋给相应的变量...CLR常用简写词语,CLR是公共语言运行库(Common Language Runtime)和Java虚拟机一样也是一个运行时环境,它负责资源管理(内存分配和垃圾收集等),并保证应用和底层操作系统之间必要的分离

    44920

    JavaString为什么要设成immutable类型

    答案一:         最流行的Java面试题之一就是:什么是不可变对象(immutable object),不可变对象有什么好处,在什么情况下应该用,或者更具体一些,JavaString为什么要设成...不可变对象,顾名思义就是创建后不可以改变的对象,典型的例子就是Java中的String类。...或者,你可以用 jd-gui 之类的工具查看一下编译后的class文件. 2....事实上,这也是Java面试中的许多 "为什么" 的答案。 答案三:String类不可变性的好处         String是所有语言中最常用的一个类。...我们知道在Java中,String是不可变的、final的。Java在运行时也保存了一个字符串池(String pool),这使得String成为了一个特别的类。

    33440

    为什么StringJava中是不可变的

    StringJava 中是不可变的。 不可变类只是一个无法修改其实例的类。 创建实例时,将初始化实例中的所有信息,并且无法修改信息。 不可变类有许多优点。...本文总结了为什么 String 设计为不可变的。 这篇文章从内存,同步和数据结构的角度说明了不变性概念。 1. 字符串池 字符串池(String intern pool)是方法区域中的特殊存储区域。...String string1 = "abcd"; String string2 = "abcd"; 如下图所示: ? 如果字符串是可变的,则使用一个引用更改字符串将导致其他引用的错误。 2....缓存的哈希码 字符串的哈希码经常在 Java 中使用。 例如,在 HashMap 或 HashSet 中。 不可变保证哈希码总是相同的,这样它就可以缓存起来而不用担心变化。...安全 String 被广泛用作许多 java 类的参数,例如 网络连接,打开文件等。字符串不是不可变的,连接或文件将被更改,这可能会导致严重的安全威胁。 该方法认为它连接到一台机器,但事实并非如此。

    1.3K20

    为什么Java里面String类是不可变的

    Java里面String类型是不可变对象,这一点毫无疑问,那么为什么Java语言的设计者要把String类型设计成不可变对象呢?这是一个值得思考的问题。...ok,下面我们来分析下为什么String是不可变的? 通过String源码可以看到,String类型的底层是由final修饰的char数组存储。...public final class String implements java.io.Serializable, Comparable, CharSequence {...总结: 本文主要介绍了Java语言里面String类型为什么设计成不可变类型,以及分析了不可变类型的带来的主要优势,需要注意的是虽然不可变类型能够带来不少的好处,但并不是说其没有弊端,不可变类型的每一次修改都需要在内存中新生成一个对象...,从另一个方面说针对经常变化的对象是不适合使用不可变类型的,这也是为什么Java里面还提供了可修改值的StringBuilder和StringBuffer类,这在实际开发中常常是需要根据具体情况权衡的。

    71940

    javaString为什么要设计成final?

    String不可变很简单,如下图,给一个已有字符串"abcd"第二次赋值成"abcedl",不是在原内存地址上修改数据,而是重新指向一个新对象,新地址。 ? 2. String为什么不可变?...翻开JDK源码,java.lang.String类起手前三行,是这样写的: public final class String implements java.io.Serializable, Comparable...示例1 package _12_01字符串;public class 为什么String要设计成不可变类你 { public static void main(String[] args) { String...(processC); } static String processA(String str){ return str + "A"; } static String processB(String...如果String是可变的,就可能如下例,我们使用StringBuffer来模拟String是可变的 package _12_01字符串;public class 为什么String要设计成不可变类2 {

    1.1K31

    JavaString为什么要设计成不可变的?

    StringJava 中不可变的类,所以一旦被实例化就无法修改。不可变类的实例一旦创建,其成员变量的值就不能被修改。...本文总结下 String 类设计成不可变的原因及好处,以及 String 类是如何设计成不可变的。 String 类设计成不可变的原因及好处?...其实好处就是原因,String 设计成不可变,主要是从性能和安全两方面考虑。 1、常量池的需要 这个方面很好理解,Java 中的字符串常量池的存在就是为了性能优化。...字符串常量池(String pool)是 Java 堆内存中一个特殊的存储区域,当创建一个 String 对象时,假如此字符串已经存在于常量池中,则不会创建新的对象,而是直接引用已经存在的对象。...public final class String implements java.io.Serializable, Comparable, CharSequence { } 4

    2.8K50

    javaString为什么要设计成final?Java面试常见问题

    其实在Java中,String类被final修饰,主要是为了保证字符串的不可变性,进而保证了它的安全性。那么final到底是怎么保证字符串安全性的呢?接下来就让我们一起来看看吧。...从结果中,我们可以看到两个字符串的唯一hash值是一样的,这就证明字符串的引用地址没有发生改变。...这个代码案例进一步证明了我们上面的结论:String字符串的不可变,指的其实是value对象在栈中的引用地址不可变,而不是说常量池中value里的数据元素不可变!...为什么要用final修饰java中的String类呢? 核心:因为它确保了字符串的安全性和可靠性。 2. java中的String真的不可变吗?...又因为数组是引用类型,所以只能限制引用不被改变,也就是说数组元素的值是可以改变的,这在上面的案例中已经证明过了; ● 接着,所有修改的方法都返回新的字符串对象,保证修改时不会改变原始对象的引用; ●

    40300

    【小家javaString为什么要设计成final?不可变有什么优点?

    ---- 源码解释: 先贴一下String类的申明代码: public final class String implements java.io.Serializable, Comparable...先认识final类 要了解为什么,首先我们得分析一下final修饰类,这个类有什么特点呢?...类的相关方法上,提高了执行效率 这点对提高效率特别重要 Java设计者认为共享带来的效率更高(比如常量池、线程池都是这个概念) 设计者为什么String被final修饰 首先我们有个共识,String...pools是为了提高JAVA内存利用率而采用的措施,当遇到String a = “HELLO”时,JAVA会先在字符串池中查找是否存在“HELLO”这个字符串,如果没有,则新创建一个对象,然后变量a指向这个地址...在JAVA中,“==”对于两个基本类型,判断内容是否相等,对于对象判断两个对象的地址值是否相等 那么String c = new String(“Hello”)又如何处理呢?

    51720

    为什么有些小数在计算机中表示有误差?!

    正因为如此,存在一部分小数在计算机中的表示会产生误差,至于为什么会产生误差,下面我来简单进行一下说明。 发现问题 首先我来简单说一下我是怎么发现这个问题的。...学过 Python 的都知道运算符(//)表示整除,运算符(%)表示求余,整除和求余同样也可以用于浮点数,逻辑和两个整数整除和求余一样。...分析问题 接下来我们尝试分析一下为什么浮点数在计算机中的表示会有这样的误差,在开始进行分析之前,我们首先必须知道,我们都知道,任何数据在计算机中的表示都是二进制的格式。...然后把等式两边变来变去,最后得出等式不成立,矛盾,原假设错误。证明过程如下图所示。 ? 有些人可能会问,这怎么就矛盾了?!等式的左边 2 的 bn 次方是一个偶数。...等式左边是偶数,右边是奇数,这怎么可能不矛盾?!如果你看懂了我的证明,你还会去尝试使用乘基取整法进行的根本停不下来吗?!

    1.4K30

    【斯坦福算法分析和设计02】渐进分析

    The Gist 1.1 为什么要学它(Motivation) 1.2 High level idea 1.3 4个例子 2....为什么我们要忽略常数因子和它的低阶项?...这两个数都与n无关,现在我们需要证明选择的这两个常量满足不等式,即对所有,都有。 首先我们看看T(n)的定义: 如果我们在右边取每个系数的绝对值,这个表达式只会变得更大。...就意味着: 对于每个,这个不等式是成立的,这就是我们想要的证明结果。 3.2 k阶多项式不是O(n^k-1) ? 它表示不同阶的多项式的大O表示法是不同的。...我们可以用反证法,假设结论的相反结论是对的,并在这个假设上进行一系列的逻辑正确的步骤,最后推导出出错。 简单的证明过程如下 ? 以下是详细的文字解释。 因此假设=,那么它意味着什么呢?

    1.1K10
    领券