public boolean equals(Object obj)指示一些其他对象是否等于此。
通过观察发现,我们使用equals方法后,比较的结果和我们想的不太一样,我们要想知道这个方法是如何实现
就应该去看源码,按住ctrl键+鼠标左键。
观察源码发现:
public boolean equals(Object obj) {
return (this == obj);
}
Object中equals方法底层默认调用的技术依旧是==,而==比较引用数据类型,比较的是地址值,而是s1和s2是两个不同的
对象,所以地址值不是一样的,所以equals比较的结果是false。
更多的情况下,我们比较引用数据类型对象的时候,想要比较的是他们成员变量之间的值是否一样,而不是比较地址值。
所以,在想要比较成员变量值是否一样的情况下,子类重写equals方法,也不需要自己手动给出,自动生成即可。
==: 返回的结果是boolean类型
基本数据类型:比较的是两边的值是否相同
引用数据类型:比较的是两边的地址值是否相同
protected void finalize()
protected void finalize() throws Throwable
当垃圾收集确定不再有对该对象的引用时,垃圾收集器在对象上调用该对象。
一个子类覆盖了处理系统资源或执行其他清理的finalize方法。
简单来说,这个方法就是用来做垃圾回收的,但是,什么时候回收我们并不清楚。
protected Object clone() throws CloneNotSupportedException
创建并返回此对象的副本。
“复制”的精确含义可能取决于对象的类。 一般的意图是,对于任何对象x ,表达式:
如果此对象的类不实现接口Cloneable ,则抛出CloneNotSupportedException 。
Cloneable接口中没有任何的成员变量和成员方法,像这样的接口称之为标记接口。
将其所有字段初始化为完全符合该对象的相应字段的内容,就像通过赋值一样。
这些字段的内容本身不被克隆。 因此,该方法执行该对象的“浅拷贝”,而不是“深度拷贝”操作。
java中有不同的拷贝方式,大致上分为两种:深拷贝,浅拷贝(面试必问)
问题:Object类中clone方法是浅拷贝还是深拷贝
第一步:什么是深浅拷贝?
浅拷贝:指的是在拷贝完后,会产生一个与原来地址值不一样的对象,但是如果对象中存在引用数据类型的成员变量,
该成员变量拷贝后指向的依旧是同一个对象,其他基本数据类型的变量值是一样的
深拷贝:指的是在拷贝完后,本身会产生一个与原来地址值不一样的对象,并且如果对象中存在引用数据类型的成员变量
拷贝后与拷贝前的成员变量地址值也是不一样的。
Scanner:键盘录入,JDK1.5之后诞生
它可以扫描接收用户输入的数据或者读取到一个文本数据
重点需要掌握三个方法:
nextInt();
next();
nextLine();
nextLine与next的区别:
nextLine可以接收到特殊字符(比如换行,tab等等)
而next不能接收特殊字符
字符串:
简单理解:用一根签将若干个字符串起来的串叫做字符串。
由多个字符组成的一串数据叫做字符串,也可以看作是一个字符数组。
String:去观察API
String类代表字符串。
Java程序中的所有字符串文字(例如"abc" )都被实现为此类的实例。
字符串不变,它们的值在创建后不能被更改。
字符串缓冲区支持可变字符串。
因为String对象是不可变的,它们可以被共享。
String类的构造方法:
public String()
public String(byte[] bytes)
public String(byte[] bytes,int offset,int length)
public String(char[] value)
public String(char[] value,int offset,int count)
public String(String original)
字符串是常量,它的值在创建之后不能更改
看程序写结果:
当字符串进行拼接的时候,如果是变量相加,会先开辟内存空间,然后再做拼接
当字符串进行拼接的时候,如果是常量相加,会先进行拼接,然后在常量池中找,如果找到了就赋值,如果找不到就开辟内存空间赋值
String类的判断功能:
boolean equals(Object obj)
boolean equalsIgnoreCase(String str)
boolean contains(String str)
boolean startsWith(String str)
boolean endsWith(String str)
boolean isEmpty()
String类的获取功能:*****
int length()
char charAt(int index)
int indexOf(int ch)
int indexOf(String str)
int indexOf(int ch,int fromIndex)
int indexOf(String str,int fromIndex)
String substring(int start)
String substring(int start,int end)
String类的转换功能:
byte[] getBytes()
char[] toCharArray()
static String valueOf(char[] chs)
static String valueOf(int i)
String toLowerCase()
String toUpperCase()
String concat(String str)
替换功能
String replace(char old,char new)
String replace(String old,String new)
去除字符串两空格
String trim()
按字典顺序比较两个字符串
int compareTo(String str)
int compareToIgnoreCase(String str)