天天看点

总结一些JAVA面试问题

看了很多博客加上自己的理解整理了一下JAVA的一些面试问题答案,这些问题来自:

原文:https://blog.csdn.net/sufu1065/article/details/88051083

1.JDK 和 JRE 有什么区别?

答:JRE: Java Runtime Environment

JDK:Java Development Kit

JRE顾名思义是java运行时环境,包含了java虚拟机,java基础类库。是使用java语言编写的程序运行所需要的软件环境,是提供给想运行java程序的用户使用的。

JDK顾名思义是java开发工具包,是程序员使用java语言编写java程序所需的开发工具包,是提供给程序员使用的。JDK包含了JRE,同时还包含了编译java源码的编译器javac,还包含了很多java程序调试和分析的工具:jconsole,jvisualvm等工具软件,还包含了java程序编写所需的文档和demo例子程序。

如果你需要运行java程序,只需安装JRE就可以了。如果你需要编写java程序,需要安装JDK。

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

答:== 比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,即是否是指相同一个对象。比较的是真正意义上的指针操作。

equals用来比较的是两个对象的内容是否相等,由于所有的类都是继承java.lang.Object类的,所以适用于所有对象,如果没有对该方法进行覆盖的话,调用的仍然是Object类中的方法,而Object中的equals方法返回的却是==的判断。

"= =“比"equals"运行速度快,因为”= ="只是比较引用。

3.两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?

答:不对,equals相等,则hashcode一定相等,反之则不然。

equals方法的作用:

1.默认情况(没有覆盖equals方法)下equals方法都是调用Object类的equals方法,而Object的equals方法主要用于判断对象的内存地址引用是不是同一个地址(是不是同一个对象)。

2.要是类中覆盖了equals方法,那么就要根据具体的代码来确定equals方法的作用了,覆盖后一般都是通过对象的内容是否相等来判断对象是否相等。

hashcode方法的作用:

hashCode是为了提高在散列结构存储中查找的效率(定位在hash表中的位置),在线性表中没有作用,hashcode方法只有在集合中用到.

⚠️注意:

1.若重写了equals(Object obj)方法,则有必要重写hashCode()方法。

2.若两个对象equals(Object obj)返回true,则hashCode()有必要也返回相同的int数。

3.若两个对象equals(Object obj)返回false,则hashCode()不一定返回不同的int数。

4.若两个对象hashCode()返回相同int数,则equals(Object obj)不一定返回true。

5.若两个对象hashCode()返回不同int数,则equals(Object obj)一定返回false。

更多详情请参考:

作者:xiangyuenacha

来源:CSDN

原文:https://blog.csdn.net/xiangyuenacha/article/details/84255547

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

  1. final可以修饰类,这样的类不能被继承。
  2. final可以修饰方法,这样的方法不能被重写。
  3. final可以修饰变量,这样的变量的值不能被修改,是常量

    .

    总结一些JAVA面试问题
    例如上图,final定义了a=6,不能再次更改a的值。
    总结一些JAVA面试问题
    被final修饰的TEST9类不能被继承。
    总结一些JAVA面试问题
    不能重写父类方法。

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

总结一些JAVA面试问题

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

String在JAVA中不是基础数据类型,是JAVA API中额外定义的,需要导入包,java.lang

总结一些JAVA面试问题

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

String 、StringBuffer、StringBuilder

StringBuffer 线程安全的可变字符序列,耗费系统资源(独占资源)

StringBuilder 线程不安全,节省系统资源

StringBuffer 和 StringBuilder都是可变的字符序列,操作StringBuffer StringBuilder的方法,一般没有返回值

String 线程不安全的 不可变的字符序列(不能修改字符串本身)

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

不一样

总结一些JAVA面试问题

如图,利用**new String()**方法的时候,首先在堆寻找到地址再到方法区寻找到值,利用直接赋值,则直接到方法区查找到对应到值。

9.如何将字符串反转?

还有其他方法,详情可参考:

原文博客:https://www.cnblogs.com/lanseyitai1224/p/6955609.html

这里举最简便的方法:

String类,利用toCharArray+for循环将数组中的元素倒个序排列,第一个数组元素成为最后一个,最后一个变成第一个。

这里直接举例StringBuffer类的reverse()方法。

总结一些JAVA面试问题

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

参考博客:https://blog.csdn.net/qq_25406669/article/details/79021911

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

概念:1. 抽象类是为了把相同的但不确定的东西的提取出来,为了以后的重用。定义成抽象类的目的,就是为了在子类中实现抽象类,例如:定义了“动物”父类,其中“动物名称”和“动物年龄”属性已经明确了,但是“动物叫”的方法没有明确,此时就可以将“动物叫”定义为抽象方法。

2.用abstract修饰的类,即抽象类;用abstract修饰的方法,即抽象方法。

3.抽象方法不能有方法主体。

4.抽象类不能被实例化。因为抽象类中方法未具体化,这是一种不完整的类,所以直接实例化也就没有意义了。

答:抽象类中不一定要包含abstrace方法。也就是了,抽象中可以没有abstract方法。

一旦类中包含了abstract方法,那类该类必须声明为abstract类。

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

a.抽象类不能被实例化。(普通类可以去实例化调用)

b.抽象类可以有构造函数,被继承时子类必须继承父类一个构造方法,抽象方法不能被声明为静态。

c.抽象方法只需申明,而无需实现,抽象类中可以允许普通方法有主体

d.含有抽象方法的类必须申明为抽象类

e.抽象的子类必须实现抽象类中所有抽象方法,否则这个子类也是抽象类。

另外,普通类和抽象类都可以被继承,但是抽象类被继承后子类必须重写继承的方法,除非自类也是抽象类。

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

抽象类必须被继承才能使用,而被final修饰的类无法被继承,因此final不可以修饰抽象类。

14.如何理解JAVA的多态性?

不同的对象中使用不同的方法,即同一个事件发生在不同的对象上会产生不同的结果。