一、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