`
lastsoul
  • 浏览: 34890 次
  • 性别: 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
分享到:
评论

相关推荐

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

    Java equals()方法使用详解及总结 Java 中的 equals() 方法是一个非常重要的方法,它用于比较两个对象是否相等。该方法在 Object 类中定义,所有的 Java 对象都继承自 Object,因此都拥有这个方法。但是,Object ...

    equals问题经典

    总结一下,`equals()`方法在`String`类中用于比较字符串内容,而在自定义类中如果不重写,它默认比较的是对象的引用。`==`操作符始终比较对象的引用,无论对象类型如何。因此,在涉及到自定义类比较时,如果需要比较...

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

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

    Java中的==和equals区别

    - 对于字符串和包装类,应优先使用`equals`方法进行比较,以确保得到正确的结果。 理解`==`与`equals`之间的区别对于编写正确且高效的Java代码至关重要。希望本文能帮助您更好地掌握这一概念,并在实际开发中避免...

    java中的==和equals()方法1

    总结来说,`==`在基本类型上比较值,在引用类型上比较引用,而`equals()`方法默认比较引用,但在多数情况下会根据具体类的实现比较对象内容。理解这两个方法的区别和使用场景,可以帮助我们编写出更加准确和可靠的...

    set接口经常用的hashCode和equals方法详解

    其中,`HashSet`使用哈希表实现,`LinkedHashSet`则在此基础上保持了元素的插入顺序,而`TreeSet`则是基于红黑树的排序集合。 #### 三、`hashCode`方法详解 `hashCode`方法是`Object`类的一个方法,其目的是返回...

    equals与==之间的区别

    在Java编程语言中,`equals`方法与`==`操作符是进行...总结,`equals`方法和`==`操作符在Java中用于不同的目的,理解它们的差异可以帮助开发者更准确地进行对象比较。在处理对象比较时,应根据具体需求选择适当的方法。

    ==和equals方法究竟有什么区别

    总结来说,`==`主要用于比较基本类型的值或引用类型的内存地址,而`equals()`主要用于比较对象的内容。在使用过程中,开发者需要根据实际情况选择合适的方法,尤其是在处理自定义对象时,要确保`equals()`方法正确地...

    C# Equals 和 GetHashCode 方法重写

    ### C# Equals 和 GetHashCode 方法重写 ...总结来说,正确地重写 `Equals` 和 `GetHashCode` 方法对于实现有效的对象比较和提高数据结构的性能至关重要。利用Visual Studio提供的工具可以方便地完成这一任务。

    equals与hashCode在实际开发中的重写写法

    总结来说,`equals()` 和 `hashCode()` 在实际开发中的重写是提高代码质量、确保对象比较和哈希表操作正确性的关键。开发者需要根据业务需求来定制这两个方法,确保它们遵循上述原则,并与业务逻辑保持一致。

    == and equals() 的比较 绝对值得看

    总结来说,`==`主要用于比较基本类型或对象的引用,而`equals()`主要用于比较对象的内容。在使用`equals()`时,需要注意它是否已经被重写以满足特定的比较逻辑。在处理`String`对象时,了解字符串常量池的作用也非常...

    ==代替Object#equals() - 加速在容器类中搜索元素速度的可能性

    总结来说,优化`equals()`和`hashCode()`方法可以极大提升容器类中元素搜索的速度。具体优化策略取决于应用场景,包括对象类型、比较的复杂性以及预期的数据规模。在`StringPerformanceTest.java`中,我们可以学习...

    DAL.rar_equals

    总结来说,`equals()`方法是Java中用于比较对象的重要工具,特别是在需要基于对象属性而非引用进行比较的场景下。在数据访问层中,正确实现`equals()`和`hashCode()`对于数据库实体类尤其重要,因为它直接影响到数据...

    字符串比较之 “==”和 “equals”

    总结来说,"=="比较的是对象引用,而"equals()"比较的是对象的内容。在处理字符串时,理解这两者的差异至关重要,这可以帮助我们编写出更准确、更健壮的代码。在阅读给定的"字符串比较之“==”和“equals”"文档时,...

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

    总结来说,Java中的“==”和“equals()”在比较对象时有着不同的含义。“==”主要检查对象引用的相等性,而“equals()”(尤其是经过重写后)则关注对象内容的相等性。理解并恰当使用这两个方法,是成为一名合格的...

    java中hashcode()和equals()方法详解

    本文将详细介绍这两个方法的工作原理、使用场景以及它们之间的关系。 #### `hashCode()`方法 `hashCode()`方法定义于`Object`类中,它是Java语言的基础类,所有Java类都直接或间接地继承自`Object`。`hashCode()`的...

    align_equals.rar_equals

    总结一下,这个项目可能涉及以下C语言知识点: 1. 使用`fputs()`函数进行文本输出,控制不打印换行符。 2. 头文件的使用,尤其是`vuid_event.h`可能包含特定的事件处理或标识符相关定义。 3. 字符串处理,包括查找...

    Java中equals()知识点总结

    Java中equals()知识点总结 equals()方法是Java中一个常用的方法,它用于比较两个对象是否相等。下面我们将详细讲解equals()方法的使用和覆盖。 首先,我们需要了解equals()方法的本意。在Object对象中定义的...

    Java 程序显示 equals() 方法的用法.docx

    总结一下,`Java`中的`equals()`方法是用于比较对象内容是否相等的关键工具,对于基本类型的包装类如`Short`,`equals()`方法已经进行了重写,以比较它们的数值而不是引用。理解并正确使用`equals()`方法对于编写...

    浅谈Java中的equals和==Java开发Java经验

    总结来说,理解`equals()`和`==`的区别是Java开发的基本功。`==`用于比较引用或基本类型的值,`equals()`通常用于比较对象的内容,特别是在已经重写该方法的类中。在日常编程实践中,合理运用这两个工具可以提高代码...

Global site tag (gtag.js) - Google Analytics