Java面试宝典(2020版)

一、Java 基础

1. JDK 和 JRE 有什么区别?

JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境。
JRE:Java Runtime Environment 的简称,java 运行环境,为 java 的运行提供了所需环境。
具体来说 JDK 其实包含了 JRE,同时还包含了编译 java 源码的编译器 javac,还包含了很多 java 程序调试和分析的工具。简单来说:如果你需要运行 java 程序,只需安装 JRE 就可以了,如果你需要编写 java 程序,需要安装 JDK。
2. == 和 equals 的区别是什么?
== 解读

对于基本类型和引用类型 == 的作用效果是不同的,如下所示:

  • 基本类型:比较的是值是否相同;
  • 引用类型:比较的是引用是否相同;

== 比较的是地址值(判断字段是否为null)
equals 比较的是值是否相等(比较的时候字段值)。
3. 两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?
不对,两个对象的 hashCode()相同,equals()不一定 true。

String str1 = "通话";
String str2 = "重地";
System.out.println(String.format("str1:%d | str2:%d",  str1.hashCode(),str2.hashCode()));
System.out.println(str1.equals(str2));

执行结果为:

str1:1179395 | str2:1179395

false

解读:代码解读:很显然“通话”和“重地”的 hashCode() 相同,然而 equals() 则为 false,因为在散列表中,hashCode()相等即两个键值对的哈希值相等,然而哈希值相等,并不一定能得出键值对相等。
4. final 在 java 中有什么作用?
首先先介绍下final:
final关键字, final是一个非访问修饰符,仅适用于变量(包括成员变量和局部变量),方法或类。
可适用于多个场景

场景1. 当final修饰变量时,被修饰的变量必须被初始化(赋值),且后续不能修改其值,实质上是常量;
场景2. 当final修饰方法时,被修饰的方法无法被所在类的子类重写(覆写);
场景3. 当final修饰类时,被修饰的类不能被继承,final类中的所有成员方法都会被隐式的指定为final方法,但成员变量可是final也可以是非final。
5.static在java中有何作用?
再介绍下static:static意为静态的,但凡被static 修饰说明属于类,不属于类的对象。
static方法是
6.String,StringBuffer,StringBuilder之间的关系?
String: 字符串常量是final类型的, 是不会被改变的,所以每次操作改对象都会创建一个新的对象(底层的方法 都会返回一个新的对象)

StringBuffer 字符串变量(线程安全)
StringBuilder 字符串变量(非线程安全)
性能:
1.如果要操作少量的数据用 = String
2.单线程操作字符串缓冲区 下操作大量数据 = StringBuilder
3.多线程操作字符串缓冲区 下操作大量数据 = StringBuffer

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值