`

String equal hashcode

 
阅读更多
package Test;

import java.util.HashSet;
import java.util.LinkedList;
import java.util.Set;

public class TestString {
	/*
	 * 基本数据类型,==等比的是值
	 * 对象,==对比的是内存地址
	 * equals 默认是对比内存地址,除非此类重写了equals方法,比如String,Integer,Date类
	 * */
	public static void main(String args[]){
		String s1 = "Monday";
		//在字符串缓冲区找到相同值的对象,所以直接引用
		String s2 = "Monday";
		//new 的话,会新建一个对象,所以==比较不相等
		String s3 = new String("Monday");
		System.out.println(s1==s2);//true ==对比的是内存的地址
		System.out.println(s1==s3);//false
		System.out.println(s1.equals(s3)); //String类重新了equals方法,它会对比字符串的值是否完全相等
		
		//StringBuffer在进行字符串处理时,不生成新的对象,在内存使用上要优于String类。
		//String的操作都是改变赋值地址而不是改变值操作。 
		//如果经常需要对一个字符串进行修改,使用StringBuffer要更加适合一些。
		
		StringBuffer s4 = new StringBuffer("Monday");
		s4.append("1");  
		s4.insert(6, "happy");
		System.out.println(s4);//Mondayhappy1
		
		//StringBuffer和StringBuilder类功能基本相似,
		//主要区别在于StringBuffer类的方法是多线程、安全的
		//而StringBuilder不是线程安全的,相比而言,StringBuilder类会略微快一点。
		//对于经常要改变值的字符串应该使用StringBuffer和StringBuilder类。 
		StringBuilder s5 = new StringBuilder("Tuesday");
		s5.append("2");
		System.out.println(s5); //Tuesday2
		
		//hashcode
		//hashcode方法只有在set集合中用到,若hash值一样,则认为是相同对象,不会重复放入set集合中
		LinkedList<Student> list = new LinkedList<Student>();  
        Set<Student> set = new HashSet<Student>();  
        Student stu1  = new Student(3,"张三");  
        Student stu2  = new Student(3,"张三");  
        System.out.println("stu1 == stu2 : "+(stu1 == stu2));//stu1 == stu2 : false
        System.out.println("stu1.equals(stu2) : "+stu1.equals(stu2));//stu1.equals(stu2) : true
        list.add(stu1);  
        list.add(stu2);  
        System.out.println("list size:"+ list.size()); //list size:2        
        set.add(stu1);  
        set.add(stu2);
        System.out.println("set size:"+ set.size());//set size:1
        set.remove(stu1);
        System.out.println("set size:"+ set.size());//set size:0
	}
}
//学生类
class Student {
	private int age;
	private String name;
	public Student() {
	}
	public Student(int age, String name) {
		super();
		this.age = age;
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public String getName() {
		return name;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + age;
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		System.out.println("hashCode : "+ result);
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Student other = (Student) obj;
		if (age != other.age)
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		return true;
	}	
}

 

分享到:
评论

相关推荐

    string-hashcode:java.lang.String.hashCode

    安装npm install string-hashcode 例子var hashCode = require ( 'string-hashcode' ) ;var s = 'abc' ;console . log ( s . hashCode ) ; // undefinedvar code = hashCode ( s ) ;console . log ( s . hashCode ) ...

    面试官瞬间就饱了,重写equals函数,需要重写hashCode函数吗?

    面试官瞬间就饱了,重写equals函数,需要重写hashCode函数吗? 面试官问我,为什么重写equals函数,必须重写hashCode函数,我当时就懵住了。 然后扯天扯地,然后面试官瞬间就饱了,痛定思痛,写下这篇博客 首先看...

    Java-Reflection-and-Object-Comparison-in-Java:Java Reflection创建适当的对象,覆盖equal和hashCode方法

    空构造函数定义公共方法void setIntValue(int iIn){...}定义公共方法void setStringValue(String sIn){...}按照以下方式设计Java类:2个私有数据成员double DoubleValue ; int IntValue; 空构造函数定义公共...

    关于重写equals()为什么一定要重写hashcode()自己的一点心得

    首先我们看下下面代码及输出和String重写equals和hashcode的源码: package com.zzy.test; public class Test6 { public static void main(String[] args) { String s1="aaa"; String s2="aaa"; String s3=new ...

    Java面试题.docx

    20、Object类的equal和hashCode方法重写,为什么? 21-40题 21、List,Set,Map的区别 26、ArrayMap和HashMap的对比 29、HashMap和HashTable的区别 30、HashMap与HashSet的区别 31-40题 31、HashSet与HashMap...

    Java equals 方法与hashcode 方法的深入解析

    PS:本文使用jdk1.7解析1.Object类 的equals 方法 代码如下: /** * Indicates whether some other object is “equal to” this one. *  * The {@code equals} method implements an equivalence relation * on ...

    简单概括 ==跟equals的区别

     string 类重写equals:比较的是每一个字符是否相等 hashCode(重写equals就一定要重写hashCode)  没有重写hashCode值不会变,重写了hashCode值就会改变     总结:==跟equals的区别 1. ==既可以比较基本

    8张图理解Java

     String s = "abcd";  s = s.concat("ef");  2、equals()方法、hashCode()方法的区别  HashCode被设计用来提高性能。equals()方法与hashCode()方法的区别在于:  如果两个对象相等(equal),那么他们...

    Hibernate注释大全收藏

    定义 name 属性映射到 flight_name column, not null, can't update, length equal 50 @Column( name="columnName"; (1) 列名 boolean unique() default false; (2) 是否在该列上设置唯一约束 boolean nullable...

    通过构造函数实例化对象的方法

    * @Data 编译后会自动生成set、get、无惨构造、equals、canEqual、hashCode、toString方法 */ @Data public class Person { private String name; private int age; public Person(String name){ this.name = ...

Global site tag (gtag.js) - Google Analytics