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
    
    
  • 相关阅读:
    python 基础2.5 循环中continue与breake用法
    python 基础 2.4 while 循环
    python 基础 2.3 for 循环
    python 基础 2.2 if流程控制(二)
    python 基础 2.1 if 流程控制(一)
    python 基础 1.6 python 帮助信息及数据类型间相互转换
    python 基础 1.5 python数据类型(四)--字典常用方法示例
    Tornado Web 框架
    LinkCode 第k个排列
    LeetCode 46. Permutations
  • 原文地址:https://www.cnblogs.com/gjmfg/p/5522396.html
Copyright © 2011-2022 走看看