首页 / JAVA / [java]基本数据类型
[java]基本数据类型
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了[java]基本数据类型,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3974字,纯文字阅读大概需要6分钟。
内容图文
![[java]基本数据类型](/upload/InfoBanner/zyjiaocheng/839/9b335d697bf341cea6dc217b4e3412bb.jpg)
基本数据类型及其的包装类
基本数据类型
Java
有八种基本类型。
byte
byte
数据类型是 $8$ 位、有符号的,以二进制补码表示的整数。- 最小值是
-128
( $-2^{7}$ )。 - 最大值是
127
( $2^{7} - 1$ )。 - 默认值是
0
。
short
short
数据类型是 $16$ 位、有符号的以二进制补码表示的整数。- 最小值是
-32768
( $-2^{15}$ )。 - 最大值是
32767
( $2^{15} - 1$ )。 - 默认值是
0
。
int
int
数据类型是 $32$ 位、有符号的以二进制补码表示的整数。- 最小值是
-2,147,483,648
( $-2^{31}$ )。 - 最大值是
2,147,483,647
( $2^{31} - 1$ )。 - 一般地整型变量默认为
int
类型。 - 默认值是
0
。
long
long
数据类型是 $64$ 位、有符号的以二进制补码表示的整数。- 最小值是
-9,223,372,036,854,775,808
( $-2^{63}$ )。 - 最大值是
9,223,372,036,854,775,807
( $2^{63} - 1$ )。 - 这种类型主要使用在需要比较大整数的系统上。
- 默认值是
0L
。
float
float
数据类型是单精度、$32$ 位、符合IEEE 754
标准的浮点数。float
在储存大型浮点数组的时候可节省内存空间。- 默认值是
0.0f
。
double
double
数据类型是双精度、$64$ 位、符合IEEE 754
标准的浮点数。- 浮点数的默认类型为
double
类型。 - 默认值是
0.0d
。
boolean
boolean
数据类型表示一位的信息。- 只有两个取值:
true
和false
。 - 这种类型只作为一种标志来记录
true/false
情况。 - 默认值是
false
。
char
char
类型是一个单一的 $16$ 位Unicode
字符。- 最小值是
\u0000
(即为0
)。 - 最大值是
\uffff
(即为65,535
)。
基本类型的包装类
每一个基本类型都有一个属于它的包装类,比如 int
和 Integer
,bool
和 Boolen
。
下面以 int
和 Integer
为例说明两种的差别:
Integer
变量必须实例化后才能使用,而int
变量不需要。Integer
可以是null
,而int
不行。Integer
实际是对象的引用,当new
一个Integer
时,实际上是生成一个指针指向此对象;而int
则是直接存储数据值。
基本类型的包装类和基本类型的比较
两个 Integer 变量进行 == 比较
由于 Integer
变量实际上是对一个 Integer
对象的引用,所以两个通过 new
生成的 Integer
变量永远是不相等的(因为 new
生成的是两个对象,其内存地址不同)。
Integer i = new Integer(100);
Integer j = new Integer(100);
System.out.print(i == j);
输出:
false
两个 Integer 变量进行 equals 比较
通过观察 Integer
的 equals
函数,可以发现两者比较的是 value
值,也就是被包装的值。
Integer i = new Integer(100);
Integer j = new Integer(100);
System.out.print(i.equals(j));
输出:
true
Integer 变量和 int 变量进行比较
只要两个变量的值是相等的,则结果为 true
(因为包装类 Integer
和基本数据类型 int
比较时,java
会自动拆包装为 int
,然后进行比较,实际上就变为两个 int
变量的比较)
Integer i = new Integer(100);
int j = 100;
System.out.println(i.equals(j));
System.out.println(i == j);
输出:
true
true
非 new 生成的 Integer 变量和 new 生成的 Integer 变量进行比较
结果总是为 false
。(因为非 new
生成的 Integer
变量指向的是 java
常量池中的对象,而 new Integer()
生成的变量指向堆中新建的对象,两者在内存中的地址不同)
Integer i = new Integer(100);
Integer j = 100;
System.out.print(i == j);
输出:
false
两个非 new 生成的 Integer 对象进行比较
当两个变量的值在区间 $-128$ 到 $127$ 之间,则比较结果为 true
;
当两个变量的值不在此区间,则比较结果为 false
。
Integer i = 100;
Integer j = 100;
System.out.println(i == j);
输出:
true
Integer i = 200;
Integer j = 200;
System.out.println(i == j);
输出:
false
为什么两个非 new 生成的 Integer 对象进行比较会出现这种情况?
因为 Java
在编译 Integer i = 100;
时,会翻译成为 Integer i = Integer.valueOf(100);
,而 Java API
中对 Integer
类型的 valueOf
的定义如下:
public static Integer valueOf(int i){
assert IntegerCache.high >= 127;
if (i >= IntegerCache.low && i <= IntegerCache.high){
return IntegerCache.cache[i + (-IntegerCache.low)];
}
return new Integer(i);
}
所以,Java
对于$-128$到$127$之间的数,会进行缓存,Integer i = 127
时,会将 $127$ 进行缓存,下次再写 Integer j = 127
时,就会直接从缓存中取,就不会 new
了
为什么用 equals 比较两者都一样?
因为 Integer.equals(int)
时会把 int
转换成 Integer
再进行比较,根据Integer
的 equals
函数,它们总是相等的。
我们应该选用哪种方法使用整形变量?
一般我们通过 int
来使用整形变量,但是对于一些返回值可能是 null
的函数,我们需要用 Integer
去装这个返回值来防止报错。
特别的:Integer
的构造函数在 JDK 9.0
已经弃用,可能在将来的某个版本的 JDK
种消失,所以请使用 Integer i = 100
这种方式初始化 Integer
。
内容总结
以上是互联网集市为您收集整理的[java]基本数据类型全部内容,希望文章能够帮你解决[java]基本数据类型所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。