没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
试读
11页
1. Java 中的原始数据类型都有哪些,它们的大小及对应的封装类是什么? boolean boolean 数据类型非 true 即 false。这个数据类型表示 1 bit,但是它的大小并没有精 确定义。 《Java 虚拟机规范》中如是说:“虽然定义了 boolean 这种数据类型,但是只对它提 供了非常有限的支持。在 Java 虚拟机中没有任何供 boolean 值专用的字节码指令, Java 语言表达式所操作的 boolean 值,在编译之后都使用 Java 虚拟机中的 int 数据类 型来代替,而 boolean 数组将会被编码成 Java 虚拟机的 byte 数组,每个元素 boolean 元素占 8 位”。这样我们可以得出 boolean 类型单独使用是 4 个字节,在数组中又是 1 个字节。那虚拟机为什么要用 int 来代替 boolean 呢?为什么不用 byte 或 short, 这样不是更节省内存空间吗?实际上,使用 int 的原因是,对于当下 32 位的 CPU 来 说,一次进行 32 位的数据交换更加高效。 综上,我们可以知道:官方文档对 boolean 类
资源推荐
资源详情
资源评论
1. Java 中的原始数据类型都有哪些,它们的大小及对应的封装类是什么?
boolean
boolean
数据类型非
true
即
false
。这个数据类型表示
1 bit
,但是它的大小并没有精
确定义。
《
Java
虚拟机规范》中如是说:
“
虽然定义了
boolean
这种数据类型,但是只对它提
供了非常有限的支持。在
Java
虚拟机中没有任何供
boolean
值专用的字节码指令,
Java
语言表达式所操作的
boolean
值,在编译之后都使用
Java
虚拟机中的
int
数据类
型来代替,而
boolean
数组将会被编码成
Java
虚拟机的
byte
数组,每个元素
boolean
元素占
8
位
”
。这样我们可以得出
boolean
类型单独使用是
4
个字节,在数组中又是
1
个字节。那虚拟机为什么要用
int
来代替
boolean
呢?为什么不用
byte
或
short
,
这样不是更节省内存空间吗?实际上,使用
int
的原因是,对于当下
32
位的
CPU
来
说,一次进行
32
位的数据交换更加高效。
综上,我们可以知道:官方文档对
boolean
类型没有给出精确的定义,《
Java
虚拟
机规范》给出了
“
单独时使用
4
个字节,
boolean
数组时
1
个字节
”
的定义,具体还要
看虚拟机实现是否按照规范来,所以
1
个字节、
4
个字节都是有可能的。这其实是
一种时空权衡。
boolean
类型的封装类是
Boolean
。
byte——1 byte——Byte
short——2 bytes——Short
int——4 bytes——Integer
long——8 bytes——Long
float——4 bytes——Float
double——8 bytes——Double
char——2 bytes——Character
2. 谈一谈”==“与”equals()"的区别。
《Think in Java》中说:“关系操作符生成的是一个 boolean 结果,它们计算的是
操作数的值之间的关系”。
"=="判断的是两个对象的内存地址是否一样,适用于原始数据类型和枚举类型
(它们的变量存储的是值本身,而引用类型变量存储的是引用);equals 是 Object
类的方法,Object 对它的实现是比较内存地址,我们可以重写这个方法来自定义
“相等”这个概念。比如类库中的 String、Date 等类就对这个方法进行了重写。
综上,对于枚举类型和原始数据类型的相等性比较,应该使用"==";对于引用类
型的相等性比较,应该使用 equals 方法。
3. Java 中的四种引用及其应用场景是什么?
强引用: 通常我们使用 new 操作符创建一个对象时所返回的引用即为强
引用
软引用: 若一个对象只能通过软引用到达,那么这个对象在内存不足时会
被回收,可用于图片缓存中,内存不足时系统会自动回收不再使用的
Bitmap
弱引用: 若一个对象只能通过弱引用到达,那么它就会被回收(即使内存
充足),同样可用于图片缓存中,这时候只要 Bitmap 不再使用就会被回
收
虚引用: 虚引用是 Java 中最“弱”的引用,通过它甚至无法获取被引用的对
象,它存在的唯一作用就是当它指向的对象回收时,它本身会被加入到引
用队列中,这样我们可以知道它指向的对象何时被销毁。
4. object 中定义了哪些方法?
clone(), equals(), hashCode(), toString(), notify(), notifyAll(), wait(), finalize(),
getClass()
5. hashCode 的作用是什么?
请参见散列表的基本原理与实现
6. ArrayList, LinkedList, Vector 的区别是什么?
ArrayList: 内部采用数组存储元素,支持高效随机访问,支持动态调整大
小
LinkedList: 内部采用链表来存储元素,支持快速插入/删除元素,但不支
持高效地随机访问
Vector: 可以看作线程安全版的 ArrayList
7. String, StringBuilder, StringBuffer 的区别是什么?
String: 不可变的字符序列,若要向其中添加新字符需要创建一个新的
String 对象
StringBuilder: 可变字符序列,支持向其中添加新字符(无需创建新对象)
StringBuffer: 可以看作线程安全版的 StringBuilder
8. Map, Set, List, Queue、Stack 的特点及用法。
Map: Java 中存储键值对的数据类型都实现了这个接口,表示“映射表”。
支持的两个核心操作是 get(Object key)以及 put(K key, V value),分别用来
获取键对应的值以及向映射表中插入键值对。
Set: 实现了这个接口的集合类型中不允许存在重复的元素,代表数学意义
上的“集合”。它所支持的核心操作有 add(E e), remove(Object o),
contains(Object o),分别用于添加元素,删除元素以及判断给定元素是否
存在于集中。
List: Java 中集合框架中的列表类型都实现了这个接口,表示一种有序序列。
支持 get(int index), add(E e)等操作。
Queue: Java 集合框架中的队列接口,代表了“先进先出”队列。支持 add(E
element), remove()等操作。
Stack: Java 集合框架中表示堆栈的数据类型,堆栈是一种“后进先出”的数
据结构。支持 push(E item), pop()等操作。
更详细的说明请参考官方文档,对相关数据结构不太熟悉的同学可以参考《算法
导论》或其他相关书籍。
9. HashMap 和 HashTable 的区别
HashTable 是线程安全的,而 HashMap 不是
HashMap 中允许存在 null 键和 null 值,而 HashTable 中不允许
剩余10页未读,继续阅读
资源评论
Wis57
- 粉丝: 304
- 资源: 450
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于UC3842+LTS26Q1565A设计PC机充电器 硬件(原理图+PCB)工程文件.zip
- Hive SQL经典面试题,大数据SQL经典面试题
- Qt实现喷码器代码,实现二维码、条形码、图形的旋转、移动等
- 基于LM324芯片比较器传感器模块AD09设计硬件(原理图+PCB)工程文件.zip
- HTTP请求 - 记一笔-添加记账.jmx
- 2205040245凡永超硬间隔svm.ipynb
- Qt喷码器demo,演示软件,不是代码
- 目标跟踪-基于目标中心点同时进行目标检测+目标跟踪算法实现-项目源码-优质项目实战.zip
- Python《文本特征分析-全唐诗数据挖掘及分析 》+源代码
- Netron-Setup-4.5.0
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功