`
lastsoul
  • 浏览: 33172 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

equals使用总结

 
阅读更多
一、equals和==
1.equals和==的区别:前者比较内容,后者比较地址。
2.equals比较内容,但是需要覆盖这个方法,设定比较规则,JDK有一些类默认已经覆盖过了oject类的equals()方法,这些类有:java.io.file,java.util.Date,java.lang.string,包装类(Integer,Double等)
3."a"和"a "用equals比较是false,也就是说有没有空格,内容是不同的(地址也不同)。

二、常量池
Java为了提高性能,为八种基本类型和String类提供了对象池机制,当然Java的八种基本类型的包装类(Packaging Type)也有对象池机制。
public static void main(String[] args) {
		Integer i1 = new Integer(100);
		Integer i2 = new Integer(100);
		
		System.out.println(i1 == i2);
		System.out.println(i1.equals(i2));
		
		System.out.println("========");
		
		Integer i3 = 127;//128
		Integer i4 = 127;
		
		System.out.println(i3 == i4);
		System.out.println(i3.equals(i4));
		
		System.out.println("========");
		
		Integer i5 = 500;
		Integer i6 = 500;
		System.out.println(i5 == i6);
		System.out.println(i5.equals(i6));

		System.out.println("========");
		
		String strA1 = "test";
		String strB1 = "test";
		String strC1 = "test ";
		System.out.println(strA1 == strB1);
		System.out.println(strA1 == strC1);
	}

结果:
false
true
========
true
true
========
false
true
========
true
false


结论:
//通过i3==i4为ture,i5==i6为flase可知有的整数被放进“常量池”,有的没有,127是临界点
//通过strA1 == strB1为ture可知,字符串常量,是被放进常量池的

关于数值计算:
public static void objPoolTest() {
		Integer i1 = 40;
		Integer i2 = 40;
		Integer i3 = 0;
		Integer i4 = new Integer(40);
		Integer i5 = new Integer(40);
		Integer i6 = new Integer(0);
		Integer i7=i5 + i6;
		System.out.println("i1=i2\t" + (i1 == i2));
		System.out.println("i1=i2+i3\t" + (i1 == i2 + i3));
		System.out.println("i4=i5\t" + (i4 == i5));
		System.out.println("i4=i5+i6\t" + (i4 == i5 + i6));
		System.out.println("i4=i7\t" + (i4 == i7));
		System.out.println();
		
	}

结果:
i1=i2	true
i1=i2+i3	true
i4=i5	false
i4=i5+i6	true
i4=i7	false

结论:
对于i1==i2+i3、i4==i5+i6结果为True,是因为,Java的数学计算是在内存栈里操作的,Java会对i5、i6进行拆箱操作,其实比较的是基本类型(40=40+0),他们的值相同,因此结果为True。但是i4和i7地址不同,因为i7是提前算好的,所以i4和i7不属于内在中比较。

关于字符串计算:
public static void strPoolTest() {
		String str1 = "ab";
		String str2 = "ab";
		String str3 = "a";
		String str4 = "b";
		
		String str5 = new String("ab");
		String str6 = new String("ab");
		String str7 = new String("a");
		String str8 = new String("b");
		String str9=str7 + str8;
		
		System.out.println("str1=str2\t" + (str1 == str2));
		System.out.println("str1=str3+str4\t" + (str1 == str3 + str4));
		
		System.out.println("str5=str6\t" + (str5 == str6));
		System.out.println("str5=str7+str8\t" + (str5 == str7 + str8));
		System.out.println("str5=str9\t" + (str5 == str9));
		System.out.println();
		
	}

结果:
str1=str2	true
str1=str3+str4	false
str5=str6	false
str5=str7+str8	false
str5=str9	false


结论:
字符串的计算和数值是不一样的。

三、String和StringBuffer的equals
public static void main(String[] args) {
		System.out.println(new StringBuffer().toString().equals(new StringBuffer("").toString()));
		System.out.println(new StringBuffer().equals(new StringBuffer("")));
		System.out.println(new StringBuffer().toString().equals(new StringBuffer("")));
		System.out.println(new StringBuffer().toString().contentEquals(new StringBuffer("")));
	}


结果:
true
false
false
true


结论:
// 结论:第一个为true,说明String类重写过了 equals方法
// 结论:第二个为false,说明StringBuffer类没有重写过了 equals方法
// 结论:第三个为false,因为String 与 StringBuffer不是同一类型
// 结论:第四个为true,说明要判断String,StringBuffer,StringBuilder的内容是否相等,用contentEquals(CharSequence cs)
//  另:String 类中 equals方法的说明
// public boolean equals(Object anObject)将此字符串与指定的对象比较。
// 当且仅当该参数不为 null,并且是与此对象表示相同字符序列的 String 对象时,结果才为 true。
//  String 类中 contentEquals方法的说明
// public boolean contentEquals(CharSequence cs)将此字符串与指定的 CharSequence 比较。
// 当且仅当此 String 与指定序列表示相同的 char 值序列时,结果才为 true。
//  CharSequence 所有已知实现类:
// CharBuffer, Segment, String, StringBuffer, StringBuilder
分享到:
评论

相关推荐

    hashcode、equals、==总结1简单总结.txt

    hashcode、equals、==总结1简单总结.txt,他们之间的区别

    Java equals()方法使用详解及总结

    主要介绍了Java equals()方法使用详解及总结的相关资料,需要的朋友可以参考下

    Java中equals()知识点总结

    在本篇文章里小编给大家分享的是关于Java中equals()知识点总结内容,需要的朋友们可以学习参考下。

    简单概括 ==跟equals的区别

    ==  == :既可以比较基本类型,也可以比较引用类型,如果比较八大数据类型主要比较的是值,比较引用类型主要比较的是内存地址值 equals(没有被重写过) ...总结:==跟equals的区别 1. ==既可以比较基本

    298.296.JAVA基础教程_面向对象(中)-总结==与equals()(298).rar

    298.296.JAVA基础教程_面向对象(中)-总结==与equals()(298).rar

    计算机后端-Java-Java核心基础-第14章 面向对象06 15. 总结==与equals().avi

    计算机后端-Java-Java核心基础-第14章 面向对象06 15. 总结==与equals().avi

    浅析C#中的等号“==”和Equals

     对于“==”和Equals大多数网友都是这样总结的:  “==” 是比较两个变量的值相等。  Equals是比较两个变量是否指向同一个对象。  public class Person  {  public Person(string name)  {  this....

    Java==和equals的区别总结

    在本文中小编给大家整理了关于Java==和equals的区别以及相关知识点,有兴趣的朋友们学习下。

    关于equals()方法,jdk源码给出如下五点建议

    我:“不好意思面试官,刚才在总结思路。关于这个问题,我是阅读过jdk源码的,equals是比较对象内容,==是比较对象地址。” 面试官:“你确定吗?你看的那部分源码?” 我:“。。。。。。” 面试官:“好了,你回去...

    java中hashCode方法与equals方法的用法总结

    总的来说,Java中的集合(Collection)有两类,一类是List,再有一类是Set。前者集合内的元素是有序的,元素可以重复;后者元素无序,但元素不可重复

    Equals和==的区别 公共变量和属性的区别小结

    Equals 和==的区别 公共变量和属性的区别 总结一下。

    Java中==与equals的区别小结

    主要介绍了Java中==与equals的区别小结,本文总结结论:== 与 equals()比较的内容是不同的,equals()方式是String类中的方法,它用于比较两个对象引用所指的内容是否相等,而 == 比较的是两个对象引用的地址是否相等,...

    Java中比较运算符compareTo()、equals()与==的区别及应用总结

    主要给大家介绍了关于Java中比较运算符compareTo()、equals()与==的区别及应用的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧

    Java基础知识点总结.docx

    equals()方法和hashCode()方法 270 数据结构 273 Array方法类汇总 304 Java数组与集合小结 305 递归 309 对象的序列化 310 Java两种线程类:Thread和Runnable 315 Java锁小结 321 java.util.concurrent.locks包下...

    Java 2023最新面试知识点总结.pdf

    谈一谈”=“与”equals0"的区别。 《Think in Java》中说:“关系操作符生成的是一个boolean结果,它们计算的是操作数的值之间的关系”。 "=="判断的是两个对象的...对于引用类型的相等性比较,应该使用equals方法。

    eqals与==的区别总结

    详细介绍了java中使用的equals与==的区别使用以及代码示例

    Java SE练习代码总结 Java学习资料

    Java SE复习,代码总结 3、数组 数组(Array):多个相同类型数据按一定顺序排列的集合,通过编号的方式进行管理。 数组属于引用数据类型,元素可以是基本数据类型和引用数据类型,创建数组会在内存中开辟一整块...

    Daniel's Objective-C Coding Style Guidelines

    详情参考:http://desheng.me 参考Apple Coding Guidelines for Cocoa, Google Objective-C Style Guide,Three20 Source Code Style Guildelines总结的Objective-C编码规范

    java 字符串中文判断

    对网上问的一些问题的总结,封装成了一个工具类。完成的功能有: 1、判断字符串中是否有中文; 2、得到字符串中有几个中文; 3、判断字符串中有没有连续的几个中文;

    java面试八股文总结.pdf

    java八股文面试总结-合集在文档 什么是Java中的HashMap?它的工作原理是什么? 答案:HashMap是Java中的一个哈希表实现的数据结构,用于存储键值对。它通过键的哈希码来快速定位值的位置。当我们将键值对放入...

Global site tag (gtag.js) - Google Analytics