Java从入门到精通—String类【字符串常量】
- 一、 字符串常量
- 二、实例
- 【Stringdemo .java】
- 【运行分析】
- 【StringDemo2.java】
- 【运行分析】
一、 字符串常量
我们俗称的字符串常量,其实程序之中不会提供有字符串这样的“基本数据类型”,提供的只是一个String类,所以任何使用" "
定义的字符串常量实际上描述的都是一个String类的匿名对象。
String类对象的直接赋值: 将一个匿名对象设置一个具体的引用,相当于开辟一个栈内存,指向这个匿名对象,这个匿名对象是存在堆内存的。
- String类对象直接赋值 :
String str = "Daxiong";
- 字符串常量 :
"Daxiong"
可以发现:字符串常量可以调用equals()方法实现对象相等的判断,所以程序中没有字符串常量这种基本类型,有的只是String类的匿名对象。
二、实例
我们通过一个例子验证字符串常量是匿名类对象:
【Stringdemo .java】
//验证字符串常量是匿名类对象
public class Stringdemo {
public static void main(String[] args) {
String str = "Daxiong";
System.out.println("Daxiong".equals(str)); //true
//"Daxiong"能调用equals方法,说明这是个匿名类对象
}
}
【运行分析】
通过上面的例子可发现:字符串常量可以调用equals()方法实现对象相等的判断,所以程序中没有字符串常量这种基本类型,有的只是String类的匿名对象。
上一节我们学习了字符串的equals的比较,只有是String类对象才可以调用equals方法,基本数据类型是不可以的,因此我们得出字符串常量其实就是String类的匿名对象。
观察一种字符串匹配的情况:
【StringDemo2.java】
//假设一种字符串匹配的情况:
//用户输入内容进行匹配,但是用户可能有不输入,输入为空,就可能出现空指针情况:
public class Stringdemo2 {
public static void main(String[] args) {
String input = null; //用户输入的内容
//System.out.println(input.equals("Daxiong")); //字符串常量在后面的情况: ERROR:空指针异常: java.lang.NullPointerException
System.out.println("Daxiong".equals(input)); //字符串常量在前面的情况:
}
}
【运行分析】
字符串常量放在后面:
System.out.println(input.equals("baidu");
字符串常量放在前面:
System.out.println("baidu".equals(input));
关于对象相等判断的小技巧💡
在以后进行项目开发的时候,如果现在某些数据是由用户输入,并且要求这些数据为一个指定内容的情况下,建议将字符串的常量写在前面。
那为什么哩? 🤔
equals()方法里面提供有一个可以回避null的判断,如果将字符串常量写在前面,那么调用equals()方法的时候永远都不可能出现“NullPointerException”,字符串常量是一个匿名对象,匿名对象一定是开辟好堆内存空间的对象。