Java 字符串比较

本文详细解释了Java中如何使用“==”、“equals”和“compareTo”来比较字符串,并通过实例展示了不同情况下这些方法的行为差异。此外,还深入探讨了字符串常量在内存中的存储方式及其对比较结果的影响。

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

Java中比较两个字符串时:

若用的是“==”,则比较的是两个字符串的内存地址是否相等,使用如 "string1 == string2";

若用的是“equals”,则比较的是两个字符串的内容是否相等,使用如 "string1.equals(string2)"。

compareTo字符串函数比较的结果有下面三种情况:

(1) 大于0,表示string1字符串大于string2;

(2) 等于0,表示string1字符串等于string2;

(3) 小于0,表示string1字符串小于string2,

使用如 "n = string1.compareTo(string2)"。


一个实例:

public class Solution {
	public static void main(String[] args) {
		String string1 = new String("iPod");
		String string2 = new String("iTouch");
		String string3 = new String("iPod");
		String string4 = "iPod";
		String string5 = "iPod";
		
		//string1 和 string2
		if(string1 == string2)
			System.out.println("string1与string2内存地址相等!");
		else
			System.out.println("string1与string2内存地址不相等!");
		
		if(string1.equals(string2))
			System.out.println("string1与string2内容相等!");
		else
			System.out.println("string1与string2内容不相等!");
		
		//string1 和 string3
		if(string1 == string3)
			System.out.println("string1与string3内存地址相等!");
		else
			System.out.println("string1与string3内存地址不相等!");
		
		if(string1.equals(string3))
			System.out.println("string1与string3内容相等!");
		else
			System.out.println("string1与string3内容不相等!");
		
		//string1 和 string4
		if(string1 == string4)
			System.out.println("string1与string4内存地址相等!");
		else
			System.out.println("string1与string4内存地址不相等!");
				
		if(string1.equals(string4))
			System.out.println("string1与string4内容相等!");
		else
			System.out.println("string1与string4内容不相等!");		
		
		
		//string4 和 string5
		if(string4 == string5)
			System.out.println("string4与string5内存地址相等!");
		else
			System.out.println("string4与string5内存地址不相等!");
						
		if(string4.equals(string5))
			System.out.println("string4与string5内容相等!");
		else
			System.out.println("string4与string5内容不相等!");
	}
}

/**
 * 运行结果:
 * string1与string2内存地址不相等!
 * string1与string2内容不相等!
 * string1与string3内存地址不相等!
 * string1与string3内容相等!
 * string1与string4内存地址不相等!
 * string1与string4内容相等!
 * string4与string5内存地址相等!
 * string4与string5内容相等!
 */

特别注意上述运行结果中“string4与string5的内存地址和内容都相等”,这是因为在Java中,String为字符串常量时,由相同序列的字符组成的两个字符串属于同一对象,位于内存中的同一个位置。每个字符串常量只有一个 String 对象来表示,即使这个字符串常量出现在一个程序的不同位置甚至一个程序的不同程序包中。

若String string1 = "hello",而String string2 = "hell" + "o"时,两者依旧指向同一字符序列,即同一对象。("hell"+"o",两个常量字符串相加后,创建了一个新的字符串常量,这个工作是编译期间完成的)

推荐的博客:Java常量字符串String理解


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值