小周学JAVA—八股二

1、Java中equals()和==的区别

equals() 是判断两个变量或者实例指向同一个内存空间的值是不是相同

"==" 是判断两个变量或者实例是不是指向同一个内存空间

java中的数据类型,可分为两类:

基本数据类型,也称原始数据类型。byte,short,char,int,long,float,double,boolean

他们之间的比较,应用双等号 “==” ,比较的是他们的值。

2、复合数据类型(类)

当他们用 “==” 进行比较的时候,比较的是他们在 内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。 JAVA当中所有的类都是继承于Object这个基类的,在Object中的基类中定义了一个equals() 的方法,这个方法的初始行为是比较对象的内存地址,但在一些类库当中这个方法被覆盖掉了,如String,Integer,Date在这些类当中equals() 有其自身的实现,而不再是比较类在堆内存中的存放地址了。

对于复合数据类型之间进行equals() 比较,在没有覆写equals() 方法的情况下,他们之间的比较还是基于他们在内存中的存放位置的地址值的,因为Object的equals() 方法也是用双等号 “==” 进行比较的,所以比较后的结果跟双等号 “==” 的结果相同。

3. 两个对象的hashCode()相同,则equals()也一定为true么?

首先,答案肯定是不一定。同时反过来equals()为true,hashCode()也不一定相同。

类的hashCode()方法和equals()方法都可以重写,返回的值完全在于自己定义。

hashCode()返回该对象的哈希码值;equals()返回两个对象是否相等。

关于hashCode()和equals()方法是有一些常规协定 :

两个对象用equals()比较返回true,那么两个对象的hashCode()方法必须返回相同的结果。

两个对象用equals()比较返回false,不要求hashCode()方法也一定返回不同的值,但是最好返回不同值,以提高哈希表性能。

重写equals()方法,必须重写hashCode()方法,以保证equals方法相等时两个对象hashcode返回相同的值。

4. java中的final关键字

final关键字可以用来修饰引用、方法和类。

用来修饰一个引用

如果引用为基本数据类型,则该引用为常量,该值无法修改;

如果引用为引用数据类型,比如对象、数组,则该对象、数组本身可以修改,但指向该对象或数组的地址的引用不能修改。

如果引用时类的成员变量,则必须当场赋值,否则编译会报错。

用来修饰一个方法

当使用final修饰方法时,这个方法将成为最终方法,无法被子类重写。但是,该方法仍然可以被继承。

用来修饰类

当用final修改类时,该类成为最终类,无法被继承。简称为“断子绝孙类”。

5、普通类和抽象类有哪些区别

关键点:abstract修饰符(抽象方法)、具体实现过程、实例化、子类实现父类的抽象方法

普通类中不可含有抽象方法,可以被实例化;

抽象类,则抽象类中所有的方法自动被认为是抽象方法,没有实现过程,不可被实例化;

抽象类的子类,除非也是抽象类,否则必须实现该抽象类声明的方法。

6、java中abstract类和interface的区别

相同点

两者都是抽象类,都不能实例化。

interface实现类及abstrct class的子类都必须要实现已经声明的抽象方法。

不同点

interface需要实现,要用implements,而abstract class需要继承,要用extends。

一个类可以实现多个interface,但一个类只能继承一个abstract class。

interface强调特定功能的实现,而abstractclass强调所属关系。

尽管interface实现类及abstrct class的子类都必须要实现相应的抽象方法,但实现的形式不同。interface中的每一个方法都是抽象方法,都只是声明的(declaration,没有方法体),实现类必须要实现。而abstract class的子类可以有选择地实现。

7、Java中的IO流

指的是将不同的输入输出源通过流的形式进行输入或输出的操作,流是一种抽象的描述,在程序中指的是数据的一种转移方式。

 

IO流的分类:

按照数据的流向:

输入流、输出流

按照流数据的格式:

字符流、字节流

按照流数据的包装过程:

节点流(低级流)、处理流(高级流)

最基本的几种进行简单介绍:

InputStream/Reader: 所有的输入流的基类,前者是字节输入流,后者是字符输入流。

OutputStream/Writer: 所有输出流的基类,前者是字节输出流,后者是字符输出流。

Java文本文件读取的大致过程如下:

构建文件对象,

使用文件对象构造Reader对象可以是FileReader、InputStreamReader、RandomAccessFile等

使用Reader对像构建BufferedReader对象(主要使用其**readLine()**方法,用于按行读取文件)

按行读取文件,将每行获取到的字符串进行处理。

你可能感兴趣的:(java)