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

Stack Overflow 上 370万浏览量的一个问题:如何比较 Java 的字符串?

假如子类没有重写该方法的话,那么“==”操作符和 .equals() 方法的功效就完全一样——比较两个对象的内存地址或者对象的引用是否相等。...String luolita = "小萝莉"; String alita = new String("小萝莉"); 第一种是在字符串常量池(存储在方法区)中创建对象,并将对象的引用赋值给 luolita...Java 虚拟机为了提高性能和减少内存开销,就设计了字符串常量池:相同字面量的对象只有一个。 PPS:Java 虚拟机在执行程序的过程中会把内存区域划分为若干个不同的数据区域,如下图所示。 ?...经过大量实例的分析,我们可以得出如下结论(也是对提问者的回答): 当比较两个字符串对象的内容是否相等时,请使用 .equals() 方法。 当比较两个字符串对象是否相等时,请使用“==”操作符。...= null && a.equals(b)); } 如果直接使用 a.equals(b),则需要在调用之前对 a 进行判空,否则可能会抛出空指针 java.lang.NullPointerException

48630

equals() ? ==? hashCode()? 今天就把你们都认识清楚

由此可见'=='在比较的对象是引用类型时,是对栈中的地址值进行比较的。...= n2); //false ---- equals方法 默认情况,对象的equals方法 调用的是Object类中equals方法.源码如下: public boolean equals(...如果根据 equals(Object) 方法,两个对象是相等的,那么对这两个对象中的每个对象调用 hashCode 方法都必须生成相同的整数结果。...如果根据 equals(java.lang.Object) 方法,两个对象不相等,那么对这两个对象中的任一对象上调用 hashCode 方法 不要求 一定生成不同的整数结果。...(例如,String类对equals方法的重写就是逐个比较字符) 不重写的情况下,对象的equals方法 调用的是Object类中equals方法,在条件左边为Null时会报空指针,使用Objects.equals

44950
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Java异常详解

    , 相当于将处理动作交给上级调用者 四、自定义异常类 注意事项 前言 推荐一个网站给想要了解或者学习人工智能知识的读者,这个网站里内容讲解通俗易懂且风趣幽默,对我帮助很大。...当程序运行时,如果出现了一些不可预料的情况,如除零错误、空指针引用等,程序会抛出一个异常对象。异常可以被捕获并进行相应的处理,以防止程序崩溃或产生错误的结果。...一旦一个异常对象产生了,系统中就一定有相应的机制来处理它,确保不会产生死机、死循环或其他对操作系统的损害,保证整个程序运行的安全性。...使用 try 负责回收资源 刚才的代码可以有一种等价写法, 将 Scanner 对象在 try 的 ( ) 中创建, 就能保证在 try 执行完毕后自动调用 Scanner的 close 方法. try...关于 “调用栈” 方法之间是存在相互调用关系的, 这种调用关系我们可以用 “调用栈” 来描述. 在 JVM 中有一块内存空间称为 “虚拟机栈” 专门存储方法之间的调用关系.

    13210

    来了来了,Java14 它真的来了!

    isBlank() || instanceof Collection && ((Collection) o).isEmpty(); } 现在您可以在使用 instanceof 检查时直接将值赋给变量,并对其执行进一步调用...在 Java 中,编译器和运行时环境都不支持处理零引用。这些恼人的异常可以通过各种变通方法来避免。最简单的方法是将检查设置为零。不幸的是,这个过程非常繁琐,当我们需要它的时候我们往往会忘记它。...如果调用链中的一个值为零,那么您将收到一条有用的消息: man.partner().name() Result: java.lang.NullPointerException: Cannot invoke...: Cannot invoke "Person.name()" because "" is null 不幸的是,当一个空参数时,目前没有方法引用的指示: Stream.of( man...但是,如本例所示,如果将每个流方法调用放在新行中,那么麻烦的代码行可以很快地缩小范围。

    56520

    来了来了,Java14它真的来了

    () || instanceof Collection && ((Collection) o).isEmpty(); } 现在您可以在使用 instanceof 检查时直接将值赋给变量,并对其执行进一步调用...在 Java 中,编译器和运行时环境都不支持处理零引用。 这些恼人的异常可以通过各种变通方法来避免。 最简单的方法是将检查设置为零。 不幸的是,这个过程非常繁琐,当我们需要它的时候我们往往会忘记它。...使用自 JDK 8以来包含的包装器类 Optional,您可以通过 API 显式地告诉调用者,一个值可以为零,并且它必须对此进行响应。 因此,您不能再意外地遇到空引用,而必须显式地处理可能为空的值。...: Cannot invoke "Person.name()" because "" is null 不幸的是,当一个空参数时,目前没有方法引用的指示: Stream.of( man...但是,如本例所示,如果将每个流方法调用放在新行中,那么麻烦的代码行可以很快地缩小范围。

    95200

    Java中常见的异常类型

    EnumConstantNotPresentException 尝试使用未定义的枚举值。 IllegalArgumentException 用于调用方法的非法参数。...EnumConstantNotPresentException 尝试使用未定义的枚举值。 IllegalArgumentException 用于调用方法的非法参数。...CloneNotSupportedException 尝试克隆不实现Cloneable接口的对象。 IllegalAccessException 对类的访问被拒绝。...当可用内存不足以让Java虚拟机分配给一个对象时抛出该错误。 java.lang.StackOverflowError 堆栈溢出错误。当一个应用递归调用的层次太深而导致堆栈溢出时抛出该错误。...当应用试图在要求使用对象的地方使用了null时,抛出该异常。譬如:调用null对象的实例方法、访问null对象的属性、计算null对象的长度、使用throw语句抛出null等等。

    2.3K40

    Java自动拆箱空指针异常,救火队员上线

    当接口返回的userId为null时,强转这块就抛出空指针异常: Exception in thread "main" java.lang.NullPointerException at com.choupangxia.box.BoxTest.main...原因分析 最初大家可能会疑惑,抛出异常的代码都没有对象的方法调用,怎么会出现空指针呢? 这中间主要涉及到的就是一个自动拆箱操作。是否是拆箱导致的呢?我们来通过字节码看一下。...装箱时通常会调用包装类的valueOf方法,而拆箱时通常会调用包装类的xxxValue()方法,其中xxx为类似boolean/long/int等。...Integer value1 = (Integer) null; Double value2 = (Double) null; Boolean value3 = (Boolean) null; 答案:可以正常执行...在Java中null是一个特殊的值,可以赋值给任何引用类型,也可以转化为任何引用类型。

    1.4K30

    JDK 14即将发布,你所要知道的都在这里!

    另一种方法是,从距离最近的NUMA节点开始,按照距离顺序在其他NUMA节点中搜索可用region。 在老年代中,不会尝试将对象保存在同一个NUMA节点中。...NPE也可能在方法调用中传递,看下面的代码: x().y().i = 99; 文件名和行号不能指出哪个方法调用返回null。是x()还是y()?...描述 JVM在程序调用空引用的位置抛出NPE异常,通过分析程序的字节码指令,JVM可以精确判断哪个变量为空,并在NPE中描述详细信息(根据源代码)。...包含方法名、文件名和行号的null-detail消息将显示在JVM的消息中。...任何访问已关闭的内存段的尝试都将导致异常。空间和时间安全性检查对于确保内存访问API的安全性至关重要。 通过获取内存访问var句柄可以取消引用与段关联的内存。

    98930

    【Java】已解决java.lang.NullPointerException异常

    一、问题背景 在Java编程中,java.lang.NullPointerException(空指针异常)是一种常见的运行时异常。当应用程序试图在需要对象的地方使用null时,就会抛出这个异常。...这种问题通常发生在访问或修改一个尚未被实例化(即分配内存)的对象的成员时。 二、可能出错的原因 对象未初始化:在引用对象之前,没有为其分配内存。...对象被设置为null:在程序的某个地方,对象被显式地设置为null,随后又被使用。 方法返回null:一个方法被期望返回一个对象,但实际上返回了null,而调用者没有检查这一点。...,因此尝试调用toUpperCase()方法时会抛出NullPointerException。...检查返回值:如果方法可能返回null,在调用该方法后检查返回值是否为null。

    79810

    Java异常实现 及 原理

    一个异常的执行顺序 1、new一个异常对象2、终止当前的执行程序。3、弹出异常对象的引用。4、异常处理机制接管被终止的执行程序。5、寻找一个恰当的地点(异常处理程序)继续执行程序。...一个异常的诞生 1、捕获异常 引入一个概念:监控区域 -- 一段可能产生异常的代码并且后面跟着处理异常的代码 (1)try块 一个方法内部出现问题,或者一个方法内部调用其他方法的时候出现问题,当前程序会立刻中断...如果你不希望程序中断,可以在这个块儿中增加一个“尝试”各种可能产生各种异常的方法调用,他就是try块儿 try{     String ljh = null ;     ljh.equals("qwe"...,并且认为第二次调用该方法会成功。...输出的第一行包含此对象的 toString() 方法的结果。剩余行表示以前由方法 fillInStackTrace() 记录的数据。

    36120

    Java异常实现 及 原理

    一个异常的执行顺序 1、new一个异常对象2、终止当前的执行程序。3、弹出异常对象的引用。4、异常处理机制接管被终止的执行程序。5、寻找一个恰当的地点(异常处理程序)继续执行程序。...一个异常的诞生 1、捕获异常 引入一个概念:监控区域 -- 一段可能产生异常的代码并且后面跟着处理异常的代码 (1)try块 一个方法内部出现问题,或者一个方法内部调用其他方法的时候出现问题,当前程序会立刻中断...如果你不希望程序中断,可以在这个块儿中增加一个“尝试”各种可能产生各种异常的方法调用,他就是try块儿 try{     String ljh = null ;     ljh.equals("qwe"...,并且认为第二次调用该方法会成功。...输出的第一行包含此对象的 toString() 方法的结果。剩余行表示以前由方法 fillInStackTrace() 记录的数据。

    53650

    java.lang.NullPointerException出现的几种原因及解决方案

    主要介绍了 java.lang.NullPointerException 出现的几种原因及解决方案 , 本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...java.lang.NullPointerException 出现的几种原因: 1、字符串变量未初始化 2、接口类型的对象没有用具体的类初始化 比如: Map map // 会报错...} 5、优先使用String.valueOf()方法代替toString() 当程序代码需要对象的字符串表示形式时,请避免使用该对象的 toString 方法。...如果你的对象的引用等于 null , NullPointerException 则会抛出,使用静态 String.valueOf 方法,该方法不会抛出任 何异常并打印 "null" 6、class...被声明了类型,默认 class = null 这样在调用 class 中方法的时候系统只能给你个空指针异常, 给其实例化就好了: class = new Class(); 7、返回null,方法的返回值不要定义成为一般的类型

    1.8K31

    Java中有关Null的9问题

    2)就像每种原始类型都有默认值一样,如int默认值为0,boolean的默认值为false,null是任何引用类型的默认值,不严格的说是所有object类型的默认值。...3)我们要澄清一些误解,null既不是对象也不是一种类型,它仅是一种特殊的值,你可以将其赋予任何引用类型,你也可以将null转化成任何类型,来看下面的代码: String str = null; //...4)null可以赋值给引用变量,你不能将null赋给基本类型变量,例如int、double、float、boolean。...7)你可能知道不能调用非静态方法来使用一个值为null的引用类型变量。...总而言之,记住,null是任何一个引用类型变量的默认值,在java中你不能使用null引用来调用任何的instance方法或者instance变量。

    1.2K50

    Java中有关Null的9件事

    2)就像每种原始类型都有默认值一样,如int默认值为0,boolean的默认值为false,null是任何引用类型的默认值,不严格的说是所有object类型的默认值。...3)我们要澄清一些误解,null既不是对象也不是一种类型,它仅是一种特殊的值,你可以将其赋予任何引用类型,你也可以将null转化成任何类型,来看下面的代码: String str = null; //...4)null可以赋值给引用变量,你不能将null赋给基本类型变量,例如int、double、float、boolean。...7)你可能知道不能调用非静态方法来使用一个值为null的引用类型变量。...总而言之,记住,null是任何一个引用类型变量的默认值,在java中你不能使用null引用来调用任何的instance方法或者instance变量。

    67520

    最新Java面试题 每一题都是经典

    1,简单易学;    2,面向对象(封装,继承,多态);   平台无关性(Java虚拟机实现平台无关性);      一次编译,处处运行      4,可靠性; 5,安全性; 6,支持多线程 7,支持网络编程并且很方便...数组的元素可以是基本类型和引用数据类型,ArrayList的元素只能是引用数据类型。...面向对象把现实生活中的事物抽象成类,事物的行为抽象成方法,事物的信息封装成属性。对象是指具体的某个事物,对象通过类创建出来的,完成某项功能则通过调用对象的方法。...什么是多态 多态是父类或接口定义的引用变量指向子类或具体实现类的实例对象。 前提:实现或继承关系;覆写父类方法。 好处:提高了程序的扩展性。...多态:父类引用,指向子类对象。

    89010
    领券