数据类型
在计算机语言里面,可以理解为针对 内存
的一种抽象的表达方式。
所有的计算机编程语言,都会存在 数据类型
的概念,各种数据类型都需要在 学习初期 去了解。数据类型
可以说是计算机编程语言中最基本的单元。
在 Java 里面,本质上讲将 数据类型
分为两种:基本类型
和 引用类型
。
-
基本类型
:基本类型是不能简化的、内置的数据类型、由编程语言本身定义。在 Java 语言中存在byte
、short
、int
、long
、float
、double
、boolean
、char
八种基本类型
。 -
引用类型
: 不是基本类型
的数据类型
就是引用类型
,所以在 Java 中,除开上面所述的八种基本类型
都是引用类型
。
基本类型
基本类型,或者叫做内置类型。Java 中的八种基本类型分为四类。
-
整数类型,也叫整型
-
byte
:8 bit
,取值范围是[-(2^7), 2^7-1]
,默认值是0
-
short
:16 bit
,取值范围是[-(2^15), 2^15-1]
,默认值是0
-
int
:32 bit
,取值范围是[-(2^31), 2^31-1]
,默认值是0
-
long
:64 bit
,取值范围是[-(2^63), 2^63-1]
,默认值是0
-
-
浮点数类型,也叫浮点型
-
float
:32 bit
、符合IEEE 754 标准
的浮点数。默认值是0.0f
-
double
:64 bit
、符合IEEE 754 标准
的浮点数。默认值是0.0d
-
-
逻辑类型,也叫布尔类型
-
boolean
:只有两个取值:true
和false
。默认值是false
-
-
字符类型
-
char
:16 bit
,采取的Unicode
的编码方式。默认值是'\u0000'
-
我们把上面的取值范围和默认值都打印一下,代码清单如下所示。
public class Demo1 {
/**
* 成员变量不初始化就会赋默认值
*/
static byte byteDefaultValue;
static short shortDefaultValue;
static int intDefaultValue;
static long longDefaultValue;
static float floatDefaultValue;
static double doubleDefaultValue;
static boolean booleanDefaultValue;
static char charDefaultValue;
public static void main(String[] args) {
System.out.println("2^7 = " + pow(2, 7));
System.out.println("2^15 = " + pow(2, 15));
System.out.println("2^31 = " + pow(2, 31));
System.out.println("2^63 = " + pow(2, 63));
System.out.println("byte 占 " + Byte.SIZE + "(bit)" + "--------" + "byte 的默认值:[" + byteDefaultValue + "] byte 的数据范围:[" + Byte.MIN_VALUE + ", " + Byte.MAX_VALUE + "]");
System.out.println("short 占 " + Short.SIZE + "(bit)" + "--------" + "short 的默认值:[" + shortDefaultValue + "] short 的数据范围:[" + Short.MIN_VALUE + ", " + Short.MAX_VALUE + "]");
System.out.println("int 占 " + Integer.SIZE + "(bit)" + "--------" + "int 的默认值:[" + intDefaultValue + "] int 的数据范围:[" + Integer.MIN_VALUE + ", " + Integer.MAX_VALUE + "]");
System.out.println("long 占 " + Long.SIZE + "(bit)" + "--------" + "long 的默认值:[" + longDefaultValue + "] long 的数据范围:[" + Long.MIN_VALUE + ", " + Long.MAX_VALUE + "]");
System.out.println("float 占 " + Float.SIZE + "(bit)" + "--------" + "float 的默认值:[" + floatDefaultValue + "]");
System.out.println("double 占 " + Double.SIZE + "(bit)" + "--------" + "double 的默认值:[" + doubleDefaultValue + "]");
System.out.println("boolean 的默认值:" + booleanDefaultValue);
System.out.println("char 占 " + Character.SIZE + "(bit)" + "--------" + "char 的默认值:[" + charDefaultValue + "]");
System.out.println("char 的默认值是 '\\u0000': " + (charDefaultValue == '\u0000'));
}
/**
* 计算 a^n 的值
*
* @param a
* @param n
* @return
*/
public static long pow(int a, int n) {
if (n == 1) {
return a;
}
long result = 1;
for (int i = 0; i < n; i ++) {
result = result * a;
}
return result;
}
}
运行结果如下图所示:
image.png引用类型
在 Java 中,引用类型的变量非常类似于 C/C++
的 指针
。引用类型
指向一个对象,指向对象的变量是 引用变量
。
-
对象
、数组
都是引用数据类型
。 -
所有
引用类型
的默认值
都是null
。
下面讲解一下常用的引用类型。
-
String
:字符串类型。
char a = 'c'; // char 字符常量用单引号 ' '
String b = "c"; // String 字符串常量用双引号包裹 " "
-
包装类型
-
Byte
:byte
的包装类型。 -
Short
:short
的包装类型。 -
Integer
:int
的包装类型。 -
Long
:long
的包装类型。 -
Float
:float
的包装类型。 -
Double
:double
的包装类型。 -
Boolean
:boolean
的包装类型。 -
Character
:char
的包装类型。
-
-
BigDecimal
:大数类型。
装箱和拆箱
- 装箱:自动把
基本类型
转换为对应的包装类型
。 - 自动拆箱:顾名思义,跟装箱对应,就是自动将
包装类型
转换为基本类型
Integer a = 10; // 装箱
int b = a; // 拆箱
内存分配
假设计算机有 10 个的 内存区域
可以被分配,如下图所示。
分别定义一个 基本类型变量
和一个 引用类型变量
并进行赋值。
int a = 4;
Integer b = 3;
简单的内存分配示意图如下所示。
内存分配示意图.png-
基本类型
变量a
在内存地址a1
分配了值4
。可以简单的表示为基本类型变量 --> 实际值
。 -
引用类型
变量b
在内存地址a3
分配了值a6
,这里的a6
是一个内存地址
,可以用来引用内存地址 a6
中的值3
。可以简单的表示为引用类型变量 --> 引用地址 --> 实际值
(正文完)
网友评论