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 equal hashcode
猜你喜欢
转载自yangeoo.iteye.com/blog/2217095
今日推荐
周排行