Java面试题及答案(最新版,持续更新)

Java面试题及答案(2022版),适用于应届生和有工作经验的程序员,每道都是认真筛选出的高频面试题,助力大家能找到满意的工作!

下载链接全部面试题及答案PDF

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. List接口有什么特点?

顺序存储、可以有重复值。

3. &和&&的区别

&是位运算符。&&是布尔逻辑运算符,在进行逻辑判断时用&处理的前面为false后面的内容仍需处理,用&&处的前面为false不再处理后面的内容。

4. 重载和重写

1、Overload为重载,Override为重写方法的重写和重载是Java多态性的不同表现。重写是父类与子类之间多态性的一种表现,重载是一个类中多态性的一种表现。

2、如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Override)。子类的对象使用这个方法时,将调用子类中的定义,对它而言, 父类中的定义如同被“屏蔽“了

5. == 和 equals 的区别是什么?

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

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

• 引用类型:比较的是引用是否相同;
代码示例:

代码示例:

String x = "string";
String y = "string";
String z = new String("string");
System.out.println(x==y); // true
System.out.println(x==z); // false
System.out.println(x.equals(y)); // true
System.out.println(x.equals(z)); // true

代码解读:因为 x 和 y 指向的是同一个引用,所以 == 也是 true,而 new String()方法则重写开辟了内存空间,所以 == 结果为 false,而 equals 比较的一直是值,所以结果都为 true。

equals 解读

equals 本质上就是 ==,只不过 String 和 Integer 等重写了 equals 方法,把它变成了值比较。看下面的代码就明白了。

首先来看默认情况下 equals 比较一个有相同值的对象,代码如下:

class Cat {
    public Cat(String name) {
        this.name = name;
    }

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

Cat c1 = new Cat("王磊");
Cat c2 = new Cat("王磊");
System.out.println(c1.equals(c2)); // false

输出结果出乎我们的意料,竟然是 false?这是怎么回事,看了 equals 源码就知道了,源码如下:

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

原来 equals 本质上就是 ==。

那问题来了,两个相同值的 String 对象,为什么返回的是 true?代码如下:

String s1 = new String("老王");
String s2 = new String("老王");
System.out.println(s1.equals(s2)); // true

同样的,当我们进入 String 的 equals 方法,找到了答案,代码如下:

public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = value.length;
        if (n == anotherString.value.length) {
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = 0;
            while (n-- != 0) {
                if (v1[i] != v2[i])
                    return false;
                i++;
            }
            return true;
        }
    }
    return false;
}

原来是 String 重写了 Object 的 equals 方法,把引用比较改成了值比较。

总结 :== 对于基本类型来说是值比较,对于引用类型来说是比较的是引用;而 equals 默认情况下是引用比较,只是很多类重新了 equals 方法,比如 String、Integer 等把它变成了值比较,所以一般情况下 equals 比较的是值是否相等。

6.Set接口有什么特点

无须存储、不能有重复值。

7.两个对象的 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() 相等即两个键值对的哈希值相等,然而哈希值相等,并不一定能得出键值对相等。

8.ArrayList 与 LinkedList 有什么区别?

1、ArrayList 与 LinkedList 都实现了 List 接口。

2、ArrayList是线性表,底层是使用数组实现的,它在尾端插入和访问数据时效率较高。

3、 Linked是双向链表,他在中间插入或者头部插入时效率较高,在访问数据时 效率较低

9. final 在 Java 中有什么作用?

• final 修饰的类叫最终类,该类不能被继承。

• final 修饰的方法不能被重写。

• final 修饰的变量叫常量,常量必须初始化,初始化之后值就不能被修改。

10.Array与ArrayList有什么不一样?

Array与ArrayList都是用来存储数据的集合。ArrayList底层是使用数组实现的, 但是arrayList对数组进行了封装和功能扩展,拥有许多原生数组没有的一些功能。 我们可以理解成ArrayList是Array的一个升级版。

11. Java 中的 Math. round(-1. 5) 等于多少?

等于 -1,因为在数轴上取值时,中间值(0.5)向右取整,所以正 0.5 是往上取整,负 0.5 是直接舍弃。

12. JDBC操作的步骤

1、加载数据库驱动类

2、打开数据库连接

3、执行sql语句

4、处理返回结果

5、关闭资源

13. 在使用jdbc的时候,如何防止出现sql注入

使用 CallableStatement

14. 怎么在JDBC内调用一个存储过程

使用PreparedStatement类,而不是使用Statement类

15. String 属于基础的数据类型吗?

String 不属于基础类型,基础类型有 8 种:byte、boolean、char、short、int、float、long、double,而 String 属于对象。

16. Map有什么特点?

17. Java的IO流分为哪几种?

18. 常用io类有那些?

19. 字节流与字符流的区别

20. Java 中操作字符串都有哪些类?它们之间有什么区别?

21. String str="i"与 String str=new String(“i”)一样吗?

22. 是否了解连接池,使用连接池有什么好处?

23. 你所了解的数据源技术有那些?使用数据源有什么好处?

24. 如何将字符串反转?

25. String 类的常用方法都有那些?

26. final,finally,finalize区别

27. final、finalize、finally,作用

28. 抽象类必须要有抽象方法吗?

29. 普通类和抽象类有哪些区别?

30. 抽象类能使用 final 修饰吗?

31. 接口和抽象类有什么区别?

32. 如果对象的引用被置为null,垃圾收集器是否会立即释放对象占用的内存

33. 串行(serial)收集器和吞吐量(throughput)收集器的区别是什么?

34. Java 中 IO 流分为几种?

35. BIO、NIO、AIO 有什么区别?

36. Files的常用方法都有哪些?

全部面试题及答案已整理好!!!!

下载链接博主已将以下这些面试题整理成了一个面试手册,是PDF版的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农code之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值