从0到1重新认识Java(面试复习用)

193 阅读3分钟

这是我参与8月更文挑战的第5天,活动详情查看:8月更文挑战

参与工作以来,准确来说应该是开始打螺丝以来,也是时候温故而知新了,一点一点重新认识Java

1.面向对象

  • 什么是面向对象

    对标面向过程,是两种完全不同得处理问题角度;面向过程注重的是事情的每个步骤及顺序,面向对象则是注重参与者(对象)、以及各自需要做什么(方法)。

    比如:洗衣机洗衣服

    面向过程会将任务拆解成一系列的步骤(函数),1、打开洗衣机----->2、放衣服----->3、放洗衣粉----->4、清洗----->5、烘干

    面向对象会拆出人和洗衣机两个对象:

    人:打开洗衣机 放衣服 放洗衣粉

    洗衣机:清洗 烘干

  • 面向对象

    • 继承

      直接继承基类(父类),共性的方法或者属性直接使用基类,子类只需拓展延伸自己所需即可

    • 封装

      封装的意义在于,内部的细节不对外部透明,外部只需知道如何调用(传参)即可

    • 多态

      基于对象所属类的不同,外部对同一个方法的调用,实际执行的逻辑不同(常见于接口有多个实现)

2.==和equals的区别

== 是java提供的等于比较运算符,用来比较两个变量指向的内存地址是否相同;

equal是Object提供的一个方法,所有的类都是继承自Object的,所以需要关注equals是否被重写;默认的equals内部也是采用== 比较的。

public Boolean equals(Object obj) {
	return (this == obj);
}

在日常业务上,更多的使用一般是String之间的比较或者用 .toString()的方式去比较;如下是String 重写的equals方法,实际上比较的还是字符串之间的内容;首先用== 比较内存地址是否指向相同,如果相同,则直接返回;确定是否字符串,比较长度,排序对比char字符。

public Boolean equals(Object anObject) {
	if (this == anObject) {
		return true;
	}
	if (anObject instanceof String) {
		String anotherString = (String)anObject;
		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 false;
}

常见例子

public class StringDemo {
	public static void main(String args[]) {
		String str1 = "Hello";
		String str2 = new String("Hello");
		String str3 = str2;
		// 引用传递
		System.out.println(str1 == str2);
		// false
		System.out.println(str1 == str3);
		// false
		System.out.println(str2 == str3);
		// true
		System.out.println(str1.equals(str2));
		// true
		System.out.println(str1.equals(str3));
		// true
		System.out.println(str2.equals(str3));
		// true
	}
}

3.hashCode与equals

  • hashCode的介绍

    hashCode() 的作用是获取哈希码,也称为散列码;它实际上是返回一个int整数。这个哈希码的作用是确定该对象在哈希表中的索引位置。hashCode() 定义在JDK的Object.java中,Java中的任何类都包含有hashCode() 函数。

  • 为什么要有hashCode

    1、HashCode的存在主要是为了查找的快捷性,HashCode是用来在散列存储结构中确定对象的存储地址的

    2、如果两个对象equals相等,那么这两个对象的HashCode一定也相同

    3、如果对象的equals方法被重写,那么对象的HashCode方法也尽量重写

    4、如果两个对象的HashCode相同,不代表两个对象就相同,只能说明这两个对象在散列存储结构中,存放于同一个位置