网站首页 > java教程 正文
Java有8种基本类型:大致分为3类:字符,布尔,数值类型
byte:8位,最大存储数据量是255,存放的数据范围是-128~127之间。
short:16位,最大数据存储量是65536,数据范围是-32768~32767之间。
int:32位,最大数据存储容量是2的32次方减1,数据范围是负的2的31次方到正的2的31次方减1。
long:64位,最大数据存储容量是2的64次方减1,数据范围为负的2的63次方到正的2的63次方减1。
float:32位,数据范围在3.4e-45~1.4e38,直接赋值时必须在数字后加上f或F。
double:64位,数据范围在4.9e-324~1.8e308,赋值时可以加d或D也可以不加。
boolean:只有true和false两个取值。
在 Java 5 中,引入了自动装箱和自动拆箱功能(boxing/unboxing),Java 可以根据上下文,自动进行转换,极大地简化了相关编程。以 Integer 的值缓存为例,这涉及 Java 5 中另一个改进。构建 Integer 对象的传统方式是直接调用构造器,直接 new 一个对象。但是根据实践,我们发现大部分数据操作都是集中在有限的、较小的数值范围,因而,在 Java 5 中新增了静态工厂方法 valueOf,在调用它的时候会利用一个缓存机制,带来了明显的性能改进。
基础数据类型与包装类对应关系与缓存值范围如下下表所示
Java 里的两个基础要素:原始数据类型、包装类,说到这里就要谈到自动装箱、自动拆箱机制。自动装箱实际上算是一种语法糖,Java 平台为我们自动进行了一些转换,它们发生在编译阶段。
上面讲解了知识与定义,下面我们说一下在什么场景下使用最优:
1、缓存范围内使用速度最快。
2、对数据库的操作,需要对数值类型进行判空。
实际使用中应该注意哪些坑与面试点
1.返回类型与方法的出参要保持一致,否则会导致自动拆箱与装箱的性能损耗。如下:
private static long sum() {
Long sum = 0L;
for (long i = 0; i <= Integer.MAX_VALUE; i++)
sum += i;
return sum;
}
2.包装类型的默认值是 null,而基本类型的默认值都不是null
3.推荐所有包装类对象之间的值比较使用 equlas() 方法,因为包装类的非高频区数据会在堆上产生,而高频区又会复用已有对象,这样会导致同样的代码,因为取值的不同,而产生两种截然不同的结果
4.面试题,如下的输出结果是什么?
public static void main(String[] args) {
Integer num1 = -128;
Integer num2 = -128;
System.out.println("值为-128 => " + (num1 == num2));
Integer num3 = 666;
Integer num4 = 666;
System.out.println("值为666 => " + (num3 == num4));
}
输入结果为:
值为-128 => true
值为666 => false
结果解析:
因为Integer缓存值范围为:-128到127,-128刚好在范围内,其实两个变量都是指向的同一个静态值,而对于超过这个范围的值,会new一个对象
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
- 上一篇: java的8个基本类型的包装类,自动拆箱与装箱
- 下一篇: Java基本数据类型及其包装类
猜你喜欢
- 2025-01-13 java泛型generics泛型类的用法
- 2025-01-13 java final详解
- 2025-01-13 Java精选十大语法,快来瞅瞅
- 2025-01-13 java 整型类型_Java基本类型-整型解读
- 2025-01-13 I/O流之File类的用法和实例详解——Java进阶知识讲义系列(八)
- 2025-01-13 java简历包装2年工作经验,为什么公司面试通不过?
- 2025-01-13 java 核心技术-12版 卷Ⅰ- 5.4 对象包装器与自动装箱
- 2025-01-13 盘点JAVA中基于CAS实现的原子类
- 2025-01-13 九、Java数据类型
- 2025-01-13 Java中基本数据类型与包装数据类型的区别
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- 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)
本文暂时没有评论,来添加一个吧(●'◡'●)