课时43:字符串常量
摘要:本次课程的主要讨论了String类的基本操作形式,包括基本数据类型、字符串常量、对象直接赋值等概念。
1. String类的定义
2. 对象判断的小技巧
现在我们已经清楚String类的基本操作形式。
01. String类的定义
我们需要做出一个明确的定义。在程序的开发之中,任何的一个整数都是int类型,任意的小数默认都是double类型,但是对于字符串而言,程序之中不会提供字符串的基本数据类型,可以提供的只是String类。因此,任何使用“‘’”定义的字符串常量,实际上描述的都是String类的匿名对象。以之前的代码为例:
String
Str
A=
“mldn”;
如果现在要把上述代码画成内存关系图的,该如何画?我们首先需要考虑的是存在堆栈引用关系,“str”应该放置在栈内,“mldn”应该放置在堆内。我们以这个程序为例。“mldn”这个字符串存在堆,如果没有栈指向它,那么这就是一个匿名对象。所以,按照这样的理解,所谓String类对象的直接赋值直接描述的是,将一个对象匿名对象设置一个具体的引用名字。
那为什么说字符串就是匿名对象呢?我们举个范例,我们观察匿名对象的存在,需要观察一下匿名对象到底是不是真的存在。将代码修改如下:
“mldn”是个对象,如果真是匿名对象,就一定可以调用 equals 方法。于是我们现在来看一下程序执行结果。
此时可以发现,字符串常量已经可以明确的调用equals 方法实现对象相等的判断,所以我们得出结果:程序中没有字符串常量这种基本类型,有的只是String类的匿名对象,而整个对象它在处理的时候完全是由系统自动识别的。
02. 对象判断的小技巧
下面介绍关于对象相等判断的小技巧。大家在以后进行项目开发的时候,如果现在某些数据是由我们用户输入,并且要求这些数据为一个指定内容的情况下。建议将字符串常量写在前面。
现在写个代码是用户输入的数据。然后执行代码,编译执行没有任何问题。
但是,如果现在假设用户输入数据没有输入,字符串接收用户输入数据的字符串调用方法:如果现在假设没有输入数据,此时为null,此时代码运行结果如图,此时代码产生错误。
但是如果换个方式,将字符串的常量写在前面。那么这种情况下,我们再来看一下结果。
equals 方法可以帮我们自动回避空的功能,所以如果将字符串的常量写在前面,那么我们调用equals 方法的时候,永远都不可能出现谁Null pointer exception。字符串是一个匿名对象,匿名对象一定是开辟堆内存空间的对象。所以按照这样的一个整体解释而言,以后我们再进行字符串等于某个字符串比较的时候,要把字符串的一个常量写在谁前面,因为匿名对象不会为空,如果写在后面,可能造成空值指向异常。