旋转跳跃-学会操作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面向对象编程文章查看此处

相关文章
|
26天前
|
Java API 开发工具
【Azure Developer】Java代码实现获取Azure 资源的指标数据却报错 "invalid time interval input"
在使用 Java 调用虚拟机 API 获取指标数据时,因本地时区设置非 UTC,导致时间格式解析错误。解决方法是在代码中手动指定时区为 UTC,使用 `ZoneOffset.ofHours(0)` 并结合 `withOffsetSameInstant` 方法进行时区转换,从而避免因时区差异引发的时间格式问题。
131 3
|
1月前
|
算法 Java
Java多线程编程:实现线程间数据共享机制
以上就是Java中几种主要处理多线程序列化资源以及协调各自独立运行但需相互配合以完成任务threads 的技术手段与策略。正确应用上述技术将大大增强你程序稳定性与效率同时也降低bug出现率因此深刻理解每项技术背后理论至关重要.
88 16
|
2月前
|
数据采集 JSON Java
Java爬虫获取1688店铺所有商品接口数据实战指南
本文介绍如何使用Java爬虫技术高效获取1688店铺商品信息,涵盖环境搭建、API调用、签名生成及数据抓取全流程,并附完整代码示例,助力市场分析与选品决策。
|
2月前
|
数据采集 存储 前端开发
Java爬虫性能优化:多线程抓取JSP动态数据实践
Java爬虫性能优化:多线程抓取JSP动态数据实践
|
3月前
|
自然语言处理 Java Apache
在Java中将String字符串转换为算术表达式并计算
具体的实现逻辑需要填写在 `Tokenizer`和 `ExpressionParser`类中,这里只提供了大概的框架。在实际实现时 `Tokenizer`应该提供分词逻辑,把输入的字符串转换成Token序列。而 `ExpressionParser`应当通过递归下降的方式依次解析
237 14
|
传感器 分布式计算 安全
Java 大视界 -- Java 大数据在智能安防入侵检测系统中的多源数据融合与分析技术(171)
本文围绕 Java 大数据在智能安防入侵检测系统中的应用展开,剖析系统现状与挑战,阐释多源数据融合及分析技术,结合案例与代码给出实操方案,提升入侵检测效能。
|
4月前
|
存储 编译器 C语言
关于string的‘\0‘与string,vector构造特点,反迭代器与迭代器类等的讨论
你真的了解string的'\0'么?你知道创建一个string a("abcddddddddddddddddddddddddd", 16);这样的string对象要创建多少个对象么?你知道string与vector进行扩容时进行了怎么的操作么?你知道怎么求Vector 最大 最小值 索引 位置么?
85 0
|
6月前
|
自然语言处理 Java 关系型数据库
Java|小数据量场景的模糊搜索体验优化
在小数据量场景下,如何优化模糊搜索体验?本文分享一个简单实用的方案,虽然有点“土”,但效果还不错。
93 0
|
7月前
|
前端开发 Cloud Native Java
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现

热门文章

最新文章