equals() 是判断两个变量或者实例指向同一个内存空间的值是不是相同
"==" 是判断两个变量或者实例是不是指向同一个内存空间
java中的数据类型,可分为两类:
基本数据类型,也称原始数据类型。byte,short,char,int,long,float,double,boolean
他们之间的比较,应用双等号 “==” ,比较的是他们的值。
当他们用 “==” 进行比较的时候,比较的是他们在 内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。 JAVA当中所有的类都是继承于Object这个基类的,在Object中的基类中定义了一个equals() 的方法,这个方法的初始行为是比较对象的内存地址,但在一些类库当中这个方法被覆盖掉了,如String,Integer,Date在这些类当中equals() 有其自身的实现,而不再是比较类在堆内存中的存放地址了。
对于复合数据类型之间进行equals() 比较,在没有覆写equals() 方法的情况下,他们之间的比较还是基于他们在内存中的存放位置的地址值的,因为Object的equals() 方法也是用双等号 “==” 进行比较的,所以比较后的结果跟双等号 “==” 的结果相同。
首先,答案肯定是不一定。同时反过来equals()为true,hashCode()也不一定相同。
类的hashCode()方法和equals()方法都可以重写,返回的值完全在于自己定义。
hashCode()返回该对象的哈希码值;equals()返回两个对象是否相等。
关于hashCode()和equals()方法是有一些常规协定 :
两个对象用equals()比较返回true,那么两个对象的hashCode()方法必须返回相同的结果。
两个对象用equals()比较返回false,不要求hashCode()方法也一定返回不同的值,但是最好返回不同值,以提高哈希表性能。
重写equals()方法,必须重写hashCode()方法,以保证equals方法相等时两个对象hashcode返回相同的值。
final关键字可以用来修饰引用、方法和类。
用来修饰一个引用
如果引用为基本数据类型,则该引用为常量,该值无法修改;
如果引用为引用数据类型,比如对象、数组,则该对象、数组本身可以修改,但指向该对象或数组的地址的引用不能修改。
如果引用时类的成员变量,则必须当场赋值,否则编译会报错。
用来修饰一个方法
当使用final修饰方法时,这个方法将成为最终方法,无法被子类重写。但是,该方法仍然可以被继承。
用来修饰类
当用final修改类时,该类成为最终类,无法被继承。简称为“断子绝孙类”。
关键点:abstract修饰符(抽象方法)、具体实现过程、实例化、子类实现父类的抽象方法
普通类中不可含有抽象方法,可以被实例化;
抽象类,则抽象类中所有的方法自动被认为是抽象方法,没有实现过程,不可被实例化;
抽象类的子类,除非也是抽象类,否则必须实现该抽象类声明的方法。
相同点
两者都是抽象类,都不能实例化。
interface实现类及abstrct class的子类都必须要实现已经声明的抽象方法。
不同点
interface需要实现,要用implements,而abstract class需要继承,要用extends。
一个类可以实现多个interface,但一个类只能继承一个abstract class。
interface强调特定功能的实现,而abstractclass强调所属关系。
尽管interface实现类及abstrct class的子类都必须要实现相应的抽象方法,但实现的形式不同。interface中的每一个方法都是抽象方法,都只是声明的(declaration,没有方法体),实现类必须要实现。而abstract class的子类可以有选择地实现。
指的是将不同的输入输出源通过流的形式进行输入或输出的操作,流是一种抽象的描述,在程序中指的是数据的一种转移方式。
IO流的分类:
按照数据的流向:
输入流、输出流
按照流数据的格式:
字符流、字节流
按照流数据的包装过程:
节点流(低级流)、处理流(高级流)
最基本的几种进行简单介绍:
InputStream/Reader: 所有的输入流的基类,前者是字节输入流,后者是字符输入流。
OutputStream/Writer: 所有输出流的基类,前者是字节输出流,后者是字符输出流。
Java文本文件读取的大致过程如下:
构建文件对象,
使用文件对象构造Reader对象可以是FileReader、InputStreamReader、RandomAccessFile等
使用Reader对像构建BufferedReader对象(主要使用其**readLine()**方法,用于按行读取文件)
按行读取文件,将每行获取到的字符串进行处理。