区分==和equal

首先对http://blog.csdn.net/qq_32907417/article/details/50672904 的观点进行一下转载和总结。


下面是==和equal在不同情况下的区别:


1.基本数据类型

==     比较两者数值


2.类


==     比较两者在内存中的地址是否相同


equal    具体问题具体分析,不同类可能equal的实现不同。

例如,在Object中 equal()仍然是比较两者内存地址,在String中该方法被覆盖为比较两个字符串内容是否一致。


3.字符串缓冲池


下面引用一下转载的话:

原来,程序在运行的时候会创建一个字符串缓冲池当使用 s2 = "Monday" 这样的表达是创建字符串的时候,程序首先会在这个String缓冲池中寻找相同值的对象,在第一个程序中,s1先被放到了池中,所以在s2被创建的时候,程序找到了具有相同值的 s1 将s2引用s1所引用的对象"Monday" 。




这也就导致了两个分别new操作的字符串却指向了同一内存地址。这其实也是java的一种优化手段,也许有人会有这样的疑问,既然2者指向同一内存,那我修改一个,另一个岂不是也被动修改了。但实际String的定义就是不被修改的字符串,要保持内存地址不变化并且还要修改掉里面的内容,通过String进行简单操作恐怕做不到。所以介绍另一个对象StringBuffer,StringBuffer中的内容可以修改掉,并且新申请的两个StringBuffer对象,java也不可能把他们的内存地址优化到一起。下面用代码进行举例:




public class Y2017Aug29b {
	public static void main(String args[])
	{
		String s1 = "abc";
		String s2 = "abc";
		StringBuffer sb1 = new StringBuffer("abc");
		StringBuffer sb2 = new StringBuffer("abc");
		
		System.out.println("stringbuffer间比较");
		if(sb1 == sb2)
		{
			System.out.println("相等");
		}
		else
		{
			System.out.println("不等");
		}
		System.out.println("string间比较");
		if(s1 == s2)
		{
			System.out.println("相等");
		}
		else
		{
			System.out.println("不等");
		}
		
	}
}

执行结果


stringbuffer间比较
不等
string间比较
相等



4.关于对象之间==比较,我还做了一点小实验


	Integer h = new Integer(2);
		Object z = h;
这里通过比较,最终z==h ,这也更说明了等号是对内存地址的比较而与两者是否是同一类型无关。


具体代码如下:


public class Y2017Aug29a {
	public static void main(String args[])
	{
		Object a = new Integer(1);
		Object b = new Object();
		Object c = new Integer(1);
		Object d = new String("1");
		Integer e = (Integer)a;
		
		Integer h = new Integer(2);
		Object z = h;
		
		System.out.print("a and b");
		different(a, b);
		System.out.print("a and c");
		different(a, c);
		System.out.print("a and d");
		different(a, d);
		System.out.print("a and e");
		different(a, e);
		System.out.print("h and z");
		different(h, z);
	}
	public static void different(Object x,Object y)
	{
		if(x==y)
		{
			System.out.println("相等==");
		}
		else
		{
			System.out.println("不等!=");
		}
	}
}

执行结果


a and b不等!=
a and c不等!=
a and d不等!=
a and e相等==
h and z相等==


如果有说的不对的地方,望指正,谢谢!!



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值