Java SE面试题

2021-5-12

一:JDK和JRE有什么区别?

JDK:Java Development Kit( java 开发工具包)包含JRE,同时还包括 java 源码的编译器 javac、监控工具 jconsole、分析工具 jvisualvm等。(JDK = JRE +Javac)

JRE: Java Runtime Environment( java 运行时环境)。即java程序的运行时环境,包含了 java 虚拟机,java基础类库。(JRE = JVM + JavaSe 核心类库)
二:

二:== 和 equals()区别?

== 是比较运算符 基础数据类型比较的是值 引用数据类型比较的是内存地址

equals()是Object类中定义的方法,底层就是 == ,JDK中类一般都重写了equals() 比较的是对象中的内容

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

三: 阐述String、StringBuffer、StringBuilder三者的区别以及各自使用的场景

String 不可变字符序列 底层使用char数组进行存储

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
    /** The value is used for character storage. */
    private final char value[];

StringBuffer 可变字符序列 底层使用char数组进行存储,属于线程安全
//StringBuffer str = new StringBuffer(“hi”); super(str.length() + 16);在传递字符串的长度上加上16
StringBuffer str = new StringBuffer();
当使用空参构造创建了一个StringBuffer对象底层默认创建了一个长度为16的char[]. 调用 str.append(“xx”)添加元素,如果底层数组容量不够则会进行扩容. 默认情况扩容为原来的两倍加2int newCapacity = (value.length << 1) + 2;
指导意见: 建议使用 StringBuffer(int capacity) 或 StringBuilder(int capacity) 指定数组长度

StringBuilder 可变字符序列 底层使用char数组进行存储,线程不安全
使用场景:
1.String: 字符串不经常改变,操作少量数据,如常量定义,少量变量运算
2.StringBuffer: 多线程情况下,操作字符串的拼接、删除、替换,考虑使用StringBuffer,例如XML解析、HTTP参数解析和封装。
3.StringBuilder: 单线程情况下,操作字符串的拼接、删除、替换,考虑使用StringBuilder,例如SQL语句的拼装、JSON封装等。

四:hashCode()相同、equals()就一定相同吗

hashCode()作用 计算对象实例的哈希码,对于Java中的对象会返回其内存地址。
equals()作用 比较对象中的内容
hashCode()相同 equals()不一定相同
equals()相同 hashCode()一定相同
即相同的对象,hashCode码一定相同

五:final、finally、finalize的区别

final表示最终的、不可变的。用于修饰类、方法、成员变量、局部变量。

  • 修饰的类不可被继承 一但类被修饰final修饰,类中的所有方法默认隐式指定为final方法
  • 修饰基本数据类型 进行初始化后值是不能在改变
  • 修饰引用数据类型的变量,初始化后对象的引用地址不能改变,但对象的属性值可以改变

finally 异常处理的一部分,它只能用在 try/catch 语句中,表示希望 finally 语句块中的代码最后一定被执行(存在一些情况导致 finally 语句块不会被执行,如 jvm 结束)

finalize() 是在 java.lang.Object 里定义的,Object 的 finalize() 方法什么都不做,对象被回收时 finalize() 方法会被调用。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要清理工作,在垃圾收集器删除对象之前被调用的。一般情况下,此方法由JVM调用。特殊情况下,可重写 finalize() 方法,当对象被回收的时候释放一些资源,须调用 super.finalize() 。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值