Java:String类型比较,equals和==比较的区别

String使用"=="操作符的作用

  1. 用于基本数据类型的比较
  2. 判断引用是否指向堆内存的同一块地址。

String的equals方法
equals方法在Object类当中,而Object是所有类的父类

	public boolean equals(Object obj) {
	        return (this == obj);
	}

而String对equals方法进行了重写。

public boolean equals(Object anObject) { 
	if (this == anObject) { 
		return true; 
	} 
	
	if (anObject instanceof String) { 
		String anotherString = (String)anObject; 
		int n = count; 
		if (n == anotherString.count) { 
			char v1[] = value; 
			char v2[] = anotherString.value; 
			int i = offset; 
			int j = anotherString.offset; 
			while (n– != 0) { 
				if (v1[i++] != v2[j++]) 
				return false; 
			} 
			return true; 
		} 
	} 
	return false; 
}

  • 解释:它首先判断的是两个对象的引用是否指向同一内存地址,是的话就返回true ,否则继续往下走,往下走时,判断是否为String类的对象,然后比较两个字符串的长度和内存,当都相等的时候就返回true ,否则返回false。

equals的作用:

用于判断两个变量是否是对同一个对象的引用,即堆中的内容是否相同,返回值为布尔类型

equals的基本使用:

boolean b = obj1.equals(obj2);
String类型比较不同对象内容是否相同,应该用equals,因为==用于比较引用类型和比较基本数据类型时具有不同的功能。

String作为一个对象来使用

例子一:对象不同,内容相同,"=="返回false,equals返回true

String s1 = new String("java");
String s2 = new String("java");

System.out.println(s1==s2);            //false
System.out.println(s1.equals(s2));    //true

例子二:同一对象,"=="和equals结果相同

String s1 = new String("java");
String s2 = s1;

System.out.println(s1==s2);            //true
System.out.println(s1.equals(s2));    //true

String作为一个基本类型来使用

如果值不相同,对象就不相同,所以"==" 和equals结果一样

String s1 = "java";
String s2 = "java";

System.out.println(s1==s2);            //true
System.out.println(s1.equals(s2));    //true

String池:

String是不可改变的,为了进步效率Java引用了字符串池的概念,例如new String(“abc”);首先会在String池中创建一个对象“abc”由于有NEW的存在所以会分配地址空间,复制String池的内容。当出现的String对象在String池中不存在时即在String池中创建该对象。

String对象的理解

  • 如果String缓冲池内不存在与其指定值相同的String对象,那么此时虚拟机将为此创建新的String对象,并存放在String缓冲池内。

  • 如果String缓冲池内存在与其指定值相同的String对象,那么此时虚拟机将不为此创建新的String对象,而直接返回已存在的String对象的引用。

  • Java中,只要使用new关键字来创建对象,则一定会(在堆区或栈区)创建一个新的对象。

  • 使用直接指定或者使用纯字符串串联来创建String对象,则仅仅会检查维护String池中的字符串,池中没有就在池中创建一个。

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值