旋转跳跃-学会操作String类数据 | 带你学《Java面向对象编程》之二十七

简介: 本节将带领读者完成对字符串数据之间的比较,并为读者介绍了字符串常量的概念与比较字符串数据的注意事项。

上一篇:初识Java神秘成员:String类 | 带你学《Java面向对象编程》之二十六
【本节目标】
通过阅读本节内容,你将初步掌握字符串数据比较的方法,并通过使用匿名String对象避免null值异常问题的出现。

字符串比较

首先来回顾一下,如果说现在要想判断两个int型变量是否相等,那么肯定使用“==”来完成,这个是由程序直接提供的比较相等的运算符。
范例:进行“==”比较

public class StringDemo {
    public static void main (String args[]) {
        int x = 10;
        int y = 10 ;
        System.out.println(x == y) ;  //true
    }
}

但是String类实际上也牵扯到一个相等的判断问题,但是对于String类相等的判断也可以使用“==”,只不过判断的不准确而已。下面通过代码来观察。
范例:实现字符串的相等判断

public class StringDemo {
    public static void main (String args[]) {
        String strA = “mldn” ;
        String strB = new String(“mldn”) ;
        System.out.println(strA == strB) ;      //执行结果为false
    }
}

此时的比较并没有成功,虽然两个字符串对象的内容是相同的,但是“==”也无法得到准确的相等判断,那么这种情况下如果要想实现准确的字符串相等判断,那么可以使用String类中所提供的一个比较方法:

  • 字符串比较(有变形):public boolean equals(String str);

范例:利用equals()实现字符串比较

public class StringDemo {
    public static void main (String args[]) {
        String strA = “mldn” ;
        String strB = new String(“mldn”) ;
        System.out.println(strA.equals(strB)) ;      //执行结果为true
    }
}

面试题:请解释String比较中“==”与equals()的区别?

  • “==”:进行的是数值比较,如果用于对象比较上比较的是两个内存的地址数值;
  • equals():是类所提供的一个比较方法,可以直接进行字符串内容的判断。

字符串常量

字符串常量是String类的匿名对象
现在已经清楚了String类的基本操作形式,但是需要做出一个明确的定义,在程序的开发之中任何的一个整数是int型,任意的小数默认都是double,但是对于字符串而言,首先程序之中不会提供有字符串这样的基本数据类型,那么可以提供的只有一个String类,所以任何使用“"”定义的字符串常量实际上描述的都是一个String类的匿名对象。
以String strA= “mldn” ;为例:
内存分析图:

image.png
图一 内存分析图

所谓的String类对象的直接赋值直接描述的是,将一个匿名对象设置一个具体的引用名字。
范例:观察匿名对象的存在

public class StringDemo {
    public static void main (String args[]) {
        String str = “mldn” ; 
        System.out.println(“mldn”.equals(str)) ;     //执行结果为true
    }
}

此时可以发现字符串常量已经可以明确的调用equals()方法实现对象相等的判断,所以可以得出一个结论:程序中的确没有字符串的常量这种基本类型,有的只是String类的匿名对象。
关于对象相等判断的小技巧:
在以后进行项目开发的时候,如果现在某些数据是由用户输入,并且要求这些数据为一个指定内容的情况下建议将字符串的一个常量写在前面。
接收用户输入数据的字符串调用方法:

public class StringDemo {
    public static void main (String args[]) {
        String input= null ;              //用户输入内容
        System.out.println(input.equals(“mldn”)) ;     
    }
}             //Exception in thread “main”java.lang.NullPointerException

换个方式,将字符串常量写在前面:

public class StringDemo {
    public static void main (String args[]) {
        String input= null ;          //用户输入内容
        System.out.println(“mldn”.equals(input)) ;       //执行结果false
    }
}

equals()方法里面提供有一个可以回避null的判断,所以如果将字符串常量写在前面,那么调用equals()方法的时候永远都不可能出现“NullPointerException”,字符串是一个匿名对象,匿名对象一定是开辟好堆内存空间的对象。
想学习更多的Java的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学

下一篇:领会String类诞生的奥妙 | 带你学《Java面向对象编程》之二十八
更多Java面向对象编程文章查看此处

相关文章
|
9天前
|
Java API 索引
Java基础—笔记—String篇
本文介绍了Java中的`String`类、包的管理和API文档的使用。包用于分类管理Java程序,同包下类无需导包,不同包需导入。使用API时,可按类名搜索、查看包、介绍、构造器和方法。方法命名能暗示其功能,注意参数和返回值。`String`创建有两种方式:双引号创建(常量池,共享)和构造器`new`(每次新建对象)。此外,列举了`String`的常用方法,如`length()`、`charAt()`、`equals()`、`substring()`等。
14 0
存储 编译器 Linux
18 0
|
2天前
|
编译器 C++
标准库中的string类(上)——“C++”
标准库中的string类(上)——“C++”
|
3天前
|
Java 编译器
Java Character 类
4月更文挑战第13天
|
3天前
|
存储 Java
Java基础教程(7)-Java中的面向对象和类
【4月更文挑战第7天】Java是面向对象编程(OOP)语言,强调将事务抽象成对象。面向对象与面向过程的区别在于,前者通过对象间的交互解决问题,后者按步骤顺序执行。类是对象的模板,对象是类的实例。创建类使用`class`关键字,对象通过`new`运算符动态分配内存。方法包括构造函数和一般方法,构造函数用于对象初始化,一般方法处理逻辑。方法可以有0个或多个参数,可变参数用`类型...`定义。`this`关键字用于访问当前对象的属性。
|
7天前
|
Java Shell
Java 21颠覆传统:未命名类与实例Main方法的编码变革
Java 21颠覆传统:未命名类与实例Main方法的编码变革
10 0
|
7天前
|
Java
Java 15 神秘登场:隐藏类解析未知领域
Java 15 神秘登场:隐藏类解析未知领域
11 0
|
9天前
|
安全 Java
append在Java中是哪个类下的方法
append在Java中是哪个类下的方法
21 9
|
9天前
|
JavaScript Java 测试技术
基于Java的网络类课程思政学习系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的网络类课程思政学习系统的设计与实现(源码+lw+部署文档+讲解等)
25 0
基于Java的网络类课程思政学习系统的设计与实现(源码+lw+部署文档+讲解等)
|
10天前
|
存储 安全 Java
java多线程之原子操作类
java多线程之原子操作类