一、“==”、equals()和hashcode()的区别
(1)“==”是运算符;
对于基本类型,比较的是值;
对于引用类型,比较的是引用对象的地址;
(2)equals()是Object类的方法;
不能比较基本类型;
没有重写时,equals()相当于“==”,比较的是对象的地址;
重写equals()后,equals()比较的是对象的内容,如包装类(Integer)、String。
(3)hashcode()是Object类的方法,返回的是对象的哈希值;
同一个对象的哈希码一定相等,不同对象的哈希码也有可能相等;
当equals()重写时,通常有必要重写hashcode()。
PS: equals()比较相等的两个对象的hashcode一定相等,不等的哈希码也有可能相等。
二、jre、jdk、jvm
(1)jdk是Java开发工具包;
(2)jre是Java的运行环境(Java Runtime Environment)
(3)jvm是Java虚拟机
PS:jdk包括jre,jre等于JVM+Java核心类库。
JDK中有一个名为jre的目录,里面包含两个文件夹bin和lib,bin就是JVM,lib就是JVM工作所需要的类库。
三、int和Integer的区别
(1)int是Java的一种基本数据类型,Integer是int的包装类
(2)Integer变量要先实例化
(3)Integer实际上是对象的引用,指向的 是对象的地址
(4)Integer的默认值是null,int默认值是0
四、普通类和抽象类
(1)含有抽象方法的一定是抽象类,抽象方法只需声明,不需要实现
(2)抽象类可以有抽象方法,也可以有普通方法
(3)抽象类不能被实例化new,子类继承抽象类,必须实现所有的抽象方法,否则仍是抽象类
(4)抽象方法不能被static、final修饰
五、接口和抽象类
(1)接口中只含有抽象方法,java8之后可以定义静态、default方法;抽象类中可以有普通方法
(2)关键字不同:interface、abstract
(3)一个类可以实现多个接口,但只能继承一个抽象类
(4)接口强调特定功能的实现,抽象类强调从属关系
(5)接口的成员变量默认public static final,必须赋值且不能修改;抽象类中的成员变量默认是default,可以在子类中重新定义或赋值
PS:在一些对时间要求比较高的应用中,倾向于使用抽象类,它比接口快一点。如果希望把一系列行为规范在类继承层次内,且可以更好地在同一个地方进行编码,那么抽象类是一个更好的选择。一般情况下,接口定义函数,抽象类定义默认实现
六、final、finally、finalize
(1)final:Java中的关键字
修饰类,不能被继承;
修饰方法,不能被重载;
修饰变量,声明给初值,值不能修改
(2)finally:Java的异常处理机制
无论异常是否发生,都会执行finally块中的内容。如关闭数据库。
(3)finalize():垃圾回收器删除对对象调用的方法
七、Math.round(-1.5)值是多少?
(1)Math.ceil():向上取整
Math.ceil(1.3)=2
Math.ceil(-1.3)=-1
(2)Math.floor():向下取整
Math.floor(1.3)=1
Math.floor(-1.3)=-2
(3)Math.round():四舍五入,即+0.5后向下取整
Math.floor(1.5)=2
Math.floor(-1.5)=-1
八、String str =new String("ab")、String str1 = “ab”、str.intern()的区别
(1)String str = new String("ab") 是直接在堆内存中创建一个对象,不管是否已存在
(2)String str1 = “ab” 先去常量池看是否存在元素“ab”,有就将地址赋给str1,没有就新建一个后再赋值
(3)s1.intern()是拿着堆内存中的对象去常量池中看是否存在,不存在就在常量池中创建一个
九、String 如何反转
先将对象封装到StringBuilder中,再调用reverse()方法
public class tq{
public static void main(String[]args){
String str ="abcd";
StringBuilder st1 = new StringBuilder(str);
System.out.println(st1.reverse().toString());
}
}
十、String、StringBuilder、StringBuffer的区别
(1)String:不可变量,即使重新赋值,也只是创建一个新的对象,而原对象仍存在,等待垃圾回收器销毁
(2)StringBuilder:代表了一个字符序列可变的字符串,可通过调用StringBuilder的append()、insert()、reverse()、setCharAt()、setLength()改变这个字符串的字符序列。
当一旦通过StringBuffer生成最终想要的字符串,再调用它的toString()方法转为String对象。
(3)StringBuffer:用法与StringBuilder一样
(4)“+”每次拼接都会new一个对象,而stringBuffer.append()不需要new,所以速度快,节省内存。
(5)StringBuilder线程不安全,效率高,常用于单线程
StringBuffer线程安全,由于加锁的原因,效率较低,常用于多线程
十一、String类的常用方法
(1)常用获取功能
length、charAt(int index)、indexOf(int ch)
subString(int startindex)、subString(int startindex,int endindex)按下标进行截断
split(",") 按“,”进行分割
e.g. String str = “123,456,789”
String str1 = str.split(",")[2].subString(0,2) //78
(2)常用判断功能(结果是boolean值)
equals、contains、startsWith、endWith、isEmpty()
(3)常见转换功能
toUpperCase()、toLowerCase()
(4)其他
trim()去掉两端空格
replace(String old,String new)将指定字符串进行替换
十二、实例化对象有哪几种方式?
(1)new
(2)clone()
(3)反射
//用Class.forName()获取类,再调用类的newInstance()方法
Class<?> cls = Class.forName("com.Dao.User");
User U = (User)cls.newInstance();
(4)序列化反序列化
本文详细讲解了Java中'=='、equals()和hashcode()的区别,区分jre、jdk和jvm,并剖析int与Integer的不同,以及抽象类、接口、final与垃圾回收机制。此外,还涉及字符串操作、对象比较和内存优化等内容。
16万+

被折叠的 条评论
为什么被折叠?



