==和equals和instanceof和getClass

==

引用数据类型变量用==号:


总结:引用数据类型的变量放在栈中;存的内容是首地址,所以用==号进行比较引用数据类型的变量就是比较首地址的值


基本数据类型用==进行比较:


总结:不管是引用数据类型还是基本数据类型用==比较的都是变量里面存储的内容


equals:

Java一切源于对象,Object类是所有类的父类,equals是object中的一个方法,所以说所有的类都可以调用object里的东西,所有的类也都可以对object类中的方法进行重写

引用数据类型用equals进行比较时

package com.sxt.entity;

public class Student {
	private String name;
	public Student(String name){
		this.name=name;
	}
	public void setName(String name){
		this.name=name;
	}
	
	public String getName(){
		return name;
	}
}

public class Equals {
	public static void main(String[] args){
		Student s1=new Student("张三");
		Student s2=new Student("李四");
		System.out.println(s1.equals(s2));
	}
}

对象之间的equals比较在Jdk中的源代码为:
public boolean equals(Object obj) {
        return (this == obj);
    }
谁调用equals这个方法this就指向谁,object指向的是所传的参数,最终还是比较他们里面所存的内容


是不是指向同一块内存空间

String类型的数据,用equals比较时候的例子:
package com.sxt.entity;

public class Student {
	private String name;
	public Student(String name){
		this.name=name;
	}
	public void setName(String name){
		this.name=name;
	}
	
	public String getName(){
		return name;
	}
}
package com.sxt.entity;


public class Equals {
	public static void main(String[] args){
		Student s1=new Student("张三");
		Student s2=new Student("李四");
		System.out.println(s1.getName().equals(s2.getName()));
	}
}
String类型的内容用equals进行比较在JDK中的源码是:

public boolean equals(Object anObject) {
        if (this == anObject) {//this和传过来的参数是否指向同一块内存如果指向同一块内存则内容相等
            return true;
        }
	/*
	return obj.name.equals(this.name);
	//在这句话之前没有进行类型强转,所以报错了报错的内容是:name cannot be resolved or is not a field
	*/
        if (anObject instanceof String) {//看anobject的类型是不是String类型的,
            String anotherString = (String)anObject;//是String类型的进行强转才有意义
		//如果想进行下一步的比较,必须强转为同一类型的不然不能进行比较。
            int n = value.length;
            if (n == anotherString.value.length) {//判断长度是否相等,如果不等肯定就不相等了
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                        return false;//如果这里满足条件那么就会结束方法,就不会往下执行了
                    i++;
                }
                return true;//当return就是方法结束了
            }
        }
        return false;
    }
可以对object(父)类的equals根据自己的需要进行重写:

public boolean equals(Object obj) {
		if(this==obj){
			return true;
		}
		if(obj instanceof Student){
			Student s=(Student)(obj);
			return s.name.equals(this.name);
		}
		return false;
	}



getClass():
调用:对象名.getClass();


instanceof:






toString:



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值