网站首页 > java教程 正文
1、JDK和JRE有什么区别?
思路:先分别描述一下这两种名词,然后再说说他们的区别。
答: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去修饰。
猜你喜欢
- 2024-09-08 2022最新Java基础面试题100题(2022最新电影西瓜天狼)
- 2024-09-08 105道Java面试题,认真思考对你面试很有价值
- 2024-09-08 Java面试170题全集!限时领取(含题目答案)!
- 2024-09-08 JAVA面试题:69道Spring面试题和答案
- 2024-09-08 字节跳动Java研发面试99题(含答案):JVM+Spring+MySQL+线程池+锁
- 2024-09-08 扣丁学堂分享Java笔试题大全(扣丁学堂分享java笔试题大全及答案)
- 2024-09-08 Javaweb笔试题及机试题(附答案)(javaweb面试题目整理)
- 2024-09-08 分享java50道基础面试题(有答案)(50道javascript基础面试题附答案)
- 2024-09-08 2022 Java面试题大全1000面试题附答案详解,最全面详细,看完稳了
- 2024-09-08 干货来了!| 125 条常见的 java 面试笔试题大汇总 |(50/125)| 日更
你 发表评论:
欢迎- 05-15java使用iText解析PDF文件
- 05-15java 将pdf 形成的图片,每页一张图片 保存为pdf文件
- 05-15Java学习123——虚拟方法调用(Virtual Method Invocation)
- 05-15什么是JNI?为什么会有Native层?如何使用?
- 05-15Socket通信
- 05-15译文:理解Java中的弱引用
- 05-15Java 调用 DeepSeek 模型的完整示例及特点
- 05-15Java 对象和类
- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)