专业的JAVA编程教程与资源

网站首页 > java教程 正文

java笔试题(java笔试题大全带答案)

temp10 2024-09-08 09:37:15 java教程 13 ℃ 0 评论

1、JDK和JRE有什么区别?

思路:先分别描述一下这两种名词,然后再说说他们的区别。

java笔试题(java笔试题大全带答案)

答:JDK是 Java 语言的软件开发工具包( SDK ),是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具

JRE是指Java运行环境,是运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库,它包括JVM虚拟机、JAVA核心类和支持文件

它们的区别就是JDK包含了JRE,编译器,调试器和其他工具,也就是JDK包含了JAVA开发环境和运行环境,而JRE只是运行环境。

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

思路:这个跟JMM(内存模式)有一定关系,因为他们比较的就是意义不同,可以从相同点和不同点来回答这题

答:==和equals都是属于两个值的比较,"=="在基础数据类型(浮点型,整型,字符型,布尔型)比较时,是成立的。但如果是两个String做比较,就可能不成立。

原因就是“==”比较的是比虚拟机栈中的内存地址,而基础数据类型在虚拟机栈中是直接包括值的,而String是引用类型,值是存储在堆中的,在虚拟机栈只存内在地址,这就使得两个内存地址相比较是不同的。虽然String a = 'a'和 String b = 'a'中,值都是a,也就是堆的值是一样的,但在堆中是分了两块内存进行存储的,而在虚拟机栈中,就是两块不同的内存引用地址,因此“==”在引用类型上的比较是不成立的。

“equals”,的理解,我们可以从源码中分析一下:

总结来说:

1)对于==,如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;

如果作用于引用类型的变量,则比较的是所指向的对象的地址

2)对于equals方法,注意:equals方法不能作用于基本数据类型的变量

如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;

诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。

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

思路:首先分别解释一下hashCode和equals,然后再说区别

hashCode

是jdk根据对象的地址或者字符串或者数字算出来的int类型的数值 ,在 Java 应用程序执行期间,在对同一对象多次调用 hashCode 方法时,必须一致地返回相同的整数,前提是将对象进行hashcode比较时所用的信息没有被修改。

equals

如果根据 equals(Object) 方法,两个对象是相等的,那么对这两个对象中的每个对象调用 hashCode 方法都必须生成相同的整数结果,注:这里说的equals(Object) 方法是指Object类中未被子类重写过的equals方法。 即使两个hashCode()返回的结果相等,两个对象的equals方法也不一定相等

上面是hashCode和equals的解释,看着是不是有点矛盾?其实就是说equals成立的两个对象的hashCode一定是相同的。但是反过来讲,两个相同的hashCode不一定equals是成立的。

hashCode的源码如下:记算的是HASH值,char val[] =value这句,在前面的equals中有看到过吧?这也是为什么equals成立的情况下,hashCode一定相同了,因为他的算法是固定的,只有val不同而与。

4、String属于基础的数据类型吗?

思路:如果会问到这个,不要直接回答不是,而是要加一点原理,这样能为自己加分

答:String属于引用类型,不属于基础数据类型,基础数据类型是指浮点型,整型,布尔型,字符型。String的值是直接存储在堆中的,而基础数据类型存储在虚拟机栈中。

5、final在JAVA中有什么作用?

答:final在JAVA中是一个修饰关键词,他可以修饰类,方法,变量,常量等,被修饰的类不可被继承,被修饰的方法不可被重写,在修饰的变量,必须要赋值,并且只能赋值一次,至于修饰常量,如果是基础数据类型,将值不可变,如果是引用类型,引用地址不可变。也就是final的作用就是被final修饰的对象是不可变的,如果我们在程序在设计中,若遇到一些不让其他程序去修改他的值,就可以使用final去修饰。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表