Java从入门到精通—String类【字符串常量】

本文深入探讨Java中字符串常量的本质,揭示其作为String类匿名对象的特性。通过实例演示如何利用equals()方法进行字符串比较,特别关注空指针异常的避免策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、 字符串常量

我们俗称的字符串常量,其实程序之中不会提供有字符串这样的“基本数据类型”,提供的只是一个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”,字符串常量是一个匿名对象,匿名对象一定是开辟好堆内存空间的对象。


喜欢的话记得点赞收藏哟😊
Java从入门到精通博文专栏持续更新!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大雄不是大熊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值