zoukankan      html  css  js  c++  java
  • ==与equals()的区别

    java中的比较有很多种
    1.==
    2.equals()
    3.< 或 >或 !=
    4.instanceof
    5.compareTo
    
    1.什么时候用“==” 什么时候用“equals”:
    
    基本数据类型(byte,short,char,int,long,float,double,boolean);
    
    首次你要知道什么是引用,什么是内存地址。
    引用:每一个对象都存放在内存中,都需要一个引用指向它,不然就会被java虚拟机当成垃圾回收掉。
    内存地址:简单点说就是java虚拟机给对象引用一个存储地方, 在堆中占4个字节的一串数字构成。(这里又涉及到内存的构成栈、堆、静态区)
    
    例如: “str” 对象就被放在堆中, “Hollywrod”被放在静态区中。
    String str =new String(“Hollywrod”);
    
    
    “==”在比较:
    基本数据类型:   比较的是它们字面量的值;(字面量:下面的“2” 和“hello wrod”都属于字面量。)
    引用类型   :   比较的是它们在内存地址的值。(如果两个对象引用的是同一对象,那么它们内存地址是相同的)
    例如:
        int a = 2;
        int b = 2;
        String str1 = new String("hello word");
        String str2 = new  String("hello word");
        String str3 = "hello word";
        String str4 = "hello word";
        System.out.println(a==b);  true
        System.out.println(str1==str2);  false
        System.out.println(str3==str4);  true
        
    
    “equals()”比较时:
    比较对象时:           比较的也是他们引用在内存地址的值;
    比较String类型对象时: 比较的是它们字面量的值;因为String类型的对象重写了“equals()”,所以才会比较字面量的值是否相同。
    例如:
                  public class  Student implements Comparable<Student>{
    		    private int id;
    		    private String name;
    		    
    			public Student(int id, String name) {
    				this.id = id;
    				this.name = name;
    			}
    			public int getId() {
    				return id;
    			}
    			public void setId(int id) {
    				this.id = id;
    			}
    			public String getName() {
    				return name;
    			}
    			public void setName(String name) {
    				this.name = name;
    			}
    
                @Override
    	    public int compareTo(Student o) {
    		
    		return this.name.compareTo(o.name);
    	    }
    		    
    		}
        Student s1 = new  Student("1","张飞");  
        Student s2 = new  Student("1","张飞");
        Student s3 = new  Student("10","张飞");  
        Student s4 = new  Student("15","张飞");
        Teacher t1 = new Teacher();
        System.out.println(s1.equals(s2));    false
        System.out.println(s1.getName().equals(s2.getName())); true  因为他们的name是字符串。
        
    
    
    3.这种比较应该不需要多说:大于,小于,不等于
    
    4.比较的是左右边对象是否是右边对象的引用,如果是返回true 不是则返回false 
    例如:
        System.out.println(s1 instanceof Student);true 
        System.out.println(t1 instanceof Student);false 
    
    5.比较的是两个对象,用第二个对象减去第一个对象。得到大于,等于,小于零, 返回值为1,0,-1。
    注意:如果比较类型为字符串,则默认的是比较的是字符串的长度。
          如果是两个对象,则该对象需要是实现comparable接口,重写compareTo方法,指定两个对象以什么属性作比较。
     System.out.println(s1.compareTo(s2)); 0
    
    
  • 相关阅读:
    【学习】Linux Shell脚本编程
    Linux 系统进程相关命令
    Linux 文件权限管理
    Linux 用户关联命令
    Linux shell 及命令汇总
    服务器通过树莓派控制继电器
    华为绩效管理:这样减员、增效、加薪,不服不行!!
    工作十年的程序员,却拿着毕业三年的工资,再不开窍就真晚了!
    员工离职原因,只有两点最真实,其他都是扯淡!
    最全面的2017物联网安全事件盘点
  • 原文地址:https://www.cnblogs.com/gjmfg/p/5522396.html
Copyright © 2011-2022 走看看