笔记13 equals 和 instanceof

package test0905;

public class EqualsTest {
	public static void main(String[] args) {
/*		String s1 = "北京";
		String s2 = "北京";  
		
		if( s1 == s2 ){ //地址相等吗
			System.out.println("地址相等。");
			System.out.println("s1和s2引用的是同一个对象。");
		}else {
			System.out.println("地址不相等。");
			System.out.println( "s1和s2引用的不是同一个对象。");
		}
		
		boolean flag = s1.equals(s2); //比较s1和s2对应的对象是否相等。
		if( flag ){
			System.out.println("s1>>>" + s1 + "  等于  "  + "s2>>>" + s2 );
		}else{
			System.out.println("s1>>>" + s1 + "  等于  "  + "s2>>>" + s2 );
		}
		
		String g1 = new String("北京"); //要创建一个新对象
		String g2 = new String("北京");
		if( g1 == g2 ){
			System.out.println(" g1 等于 g2 ");
			System.out.println(" g1 和 g2 引用的是同一个对象。");
		}else{
			System.out.println("g1 不等于 g2 ");
			System.out.println("g1和g2引用的是两个独立的对象。");
		}

		flag = g1.equals(g2);
		if( flag ){
			System.out.println("\ng1>>>" + g1 + " 等于  g2>>>" + g2 );
		}else{
			System.out.println("\ng1>>>" + g1 + " 不等于  g2>>>" + g2 );
		}*/
		
		Dog d1 = new Dog("AAA" , true, 1 );

		Dog d2 = new Dog("AAA" , true, 1 );
		
		if( d1 == d2 ){ //判断地址
			System.out.println("d1和d2引用的是同一个对象。");
		}else{
			System.out.println("d1和d2引用的是两个独立的对象。");
		}
		
		boolean flag = d1.equals(d2); //判断对象是否相等。
	
		if( flag ){
			System.out.println("d1 和 d2 对应的对象完全相等。");
		}else{
			System.out.println("d1 和 d2 对应的对象不相等。");
		}
		System.out.println("\nd1>>> " + d1 );
		System.out.println(  "d2>>> " + d2 ); 
	}
}

class  Dog  { 			//此类的父类为 Object 			
		private String name;
		private boolean sex;
		private int age;
		
		public Dog(String name, boolean sex, int age) {
			this.name = name;
			this.sex = sex;
			this.age = age;
		}
		
		public String getInfo(){
			return "" + name + "  " + (sex ? "公": "母") + "  " + age;
		}		
		//重写equals()方法,目的: 按自已的条件来比较两个对象相等。
			public boolean equals(Object obj) {				
				Dog d2 = (Dog)obj;		//强制转型:将Object 强制转化为 Dog类型;
					
				if( this.name.equals( d2.name) && this.sex == d2.sex && this.age == d2.age ){
					return true;
				}else{
					return false;
				}
				
			}
	
		//重写toString()方法,目的:便于以字符串方式反馈对象的信息,且该方法是默认被调用的。
	
		public String toString() {
			return "" + name + "  " + (sex ? "公": "母") + "  " + age;
		}
}


 

package test0905;

/*
 * 		1、一个纯英文的关系运算符:  instanceof 属于。用来判断对象是否属于某个类。
 * 
 * 		2、在Java语言中,一个父类的对象变量可以引用本类的对象。另外,还可引用子类的对象。
 * 
 * 			例如:  Person  p1 = new  Person();
 * 
 * 				   p1 = new Student();
 * 
 * 		3、当一个父类的对象变量引用了子类的对象时,
 * 			若通过父类的对象变量去访问继承来的方法,则是可以的。
 * 			若通过父类的对象变量去访问子类特有的成员(实例变量和方法),则不可直接访问;需要强制转换。
 * 			强制转换的格式:   (子类名)(父类的对象变量);
 * 
 * 			例如:  Person p1 = new Student();
 * 				   p1.getName(); //则是合法的。
 * 
 * 				   p1.getSchool(); //则不可直接调用。非法的。
 * 
 * 				因此,需要先将p1强制转换成Student类型的引用。之后,再去调用getSchool()
 * 				1) Student st = (Student)p1; //将父类的引用强制转换成子类的引用。
 * 				2) st.getSchool();
 * 
 * 		4、由于Object类是所有类的祖先,然而,前面讲过: 父类的对象变量可以引用子类的对象。
 * 		
 * 			因此,Object类的对象变量可以引用任何类的对象。
 * 
 * 			例如: Object obj = new Object();
 * 				  obj = new Person();
 * 				  obj = new Student();
 * 				  obj = new Dog();
 * 
 * 
 */
public class InstanceofTest{
	
	public static void main(String[] args) {
		Animal  a1 = new Animal("动物");
		
		Cat c1 = new Cat( "小猫", "blue" );
		
		if( a1 instanceof Animal ){
			System.out.println("a1属于Animal.");
		}
		
		if( a1 instanceof Cat ){
			System.out.println("a1属于Cat");
		}else{
			System.out.println("a1不属于Cat ");
		}
		
		if( c1 instanceof Cat ){
			System.out.println("c1属于Cat");
		} 
		
		if( c1 instanceof Animal ){
			System.out.println("c1属于Animal");
		}
		
		a1 = new Cat("波斯猫", "blue");
		if( a1 instanceof Animal ){
			System.out.println("a1属于Animal。");
		}
		if( a1 instanceof Cat ){
			System.out.println( "a1也属于Cat");
		}
		System.out.println("\n小猫的名称是: "+ a1.name );
		
		Cat c2 = (Cat)a1;
		System.out.println("以上小猫的眼睛的色彩是: " + c2.eyesColor); //a1.eyesColor );
	}
}

class  Animal {
	public String name;

	public Animal() {
	}
	public Animal( String name ) {
		this.name = name;
	}

	@Override
	public String toString() {
		return "name = " + name ;
	}
}

class Cat  extends  Animal {
	public String eyesColor;
	
	public Cat() {

	}
	public Cat( String name, String eyesColor ){
		super( name );
		this.eyesColor = eyesColor;
	}
	
	@Override
	public String toString() {
		return super.toString() + "  eyesColor = " + eyesColor ;
	}
}


 

### 动力节点 Java 学习资料与笔记 以下是关于动力节点 Java 学习的相关资料笔记总结: #### 1. 基础学习资源 动力节点的老杜 Java 教程是一套广受好评的学习材料,适合初学者入门。其内容覆盖了从基础语法到高级特性的多个方面。根据已有引用,可以确认以下几点: - **视频教程**:可以在 B 站上找到完整的课程内容,具体链接为 `https://www.bilibili.com/video/BV1Eb4y1P7iq`[^2]。 - **笔记整理**:多位学习者基于此课程制作了自己的学习笔记,这些笔记通常涵盖了课程的核心知识点以及一些扩展说明。 #### 2. 关键概念解析 通过已有的参考资料,可以提取以下几个重要主题及其解释: - **垃圾回收机制** Java 的垃圾回收器会在适当的时候清理不再使用的对象内存。虽然可以通过调用 `System.gc()` 方法来建议 JVM 执行垃圾回收,但这并不意味着一定会立即执行[^3]。 - **变量作用域与生命周期** 变量的作用域决定了它在程序中的有效范围。Java 中的变量遵循“就近原则”,即优先使用离当前代码最近定义的同名变量。此外,变量的生命周期与其存储位置密切相关——局部变量仅在其所在代码块 `{}` 内部存在,而实例变量则伴随对象的创建销毁过程[^4]。 - **常用方法概述** 对象的一些内置方法对于理解类的行为非常重要,例如: - `clone()`:用于复制对象; - `hashCode()` `equals(Object obj)`:分别用来获取哈希码值并比较两个对象是否相等; - `toString()`:返回表示对象状态的字符串描述; - `finalize()`:由垃圾收集器调用,在对象被销毁前完成必要的清理工作[^5]。 #### 3. 推荐学习路径 为了更好地掌握 Java 编程技能,可以从以下几个阶段入手: - 初级阶段:熟悉基本数据类型、控制结构(如循环语句)、数组操作等内容; - 进阶阶段:深入研究面向对象编程特性,比如继承、多态性接口实现; - 高级阶段:探索集合框架、异常处理机制及并发编程技术等领域。 ```java // 示例代码展示如何自定义一个简单的类,并重写几个重要的方法 public class Person { private String name; public Person(String name) { this.name = name; } @Override public int hashCode() { return Objects.hash(name); } @Override public boolean equals(Object obj) { if (this == obj) return true; if (!(obj instanceof Person)) return false; Person person = (Person) obj; return Objects.equals(this.name, person.name); } @Override public String toString() { return "Person{name='" + name + "'}"; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值