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; } }
相关推荐
安装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函数,我当时就懵住了。 然后扯天扯地,然后面试官瞬间就饱了,痛定思痛,写下这篇博客 首先看...
空构造函数定义公共方法void setIntValue(int iIn){...}定义公共方法void setStringValue(String sIn){...}按照以下方式设计Java类:2个私有数据成员double DoubleValue ; int IntValue; 空构造函数定义公共...
首先我们看下下面代码及输出和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 ...
20、Object类的equal和hashCode方法重写,为什么? 21-40题 21、List,Set,Map的区别 26、ArrayMap和HashMap的对比 29、HashMap和HashTable的区别 30、HashMap与HashSet的区别 31-40题 31、HashSet与HashMap...
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 ...
string 类重写equals:比较的是每一个字符是否相等 hashCode(重写equals就一定要重写hashCode) 没有重写hashCode值不会变,重写了hashCode值就会改变 总结:==跟equals的区别 1. ==既可以比较基本
String s = "abcd"; s = s.concat("ef"); 2、equals()方法、hashCode()方法的区别 HashCode被设计用来提高性能。equals()方法与hashCode()方法的区别在于: 如果两个对象相等(equal),那么他们...
定义 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 = ...