01、数据类型初阶(Java的基本数据类型)
2016-02-18 21:42
459 查看
Java基本数据类型
变量就是申请内存来存储值。也就是说,当创建变量的时候,需要在内存中申请空间。内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据。因此,通过定义不同类型的变量,可以在内存中存储整形、小数或者字符。
Java的两大数据类型:
内置数据类型(基本数据类型)
引用数据类型
内置数据类型(基本数据类型)
Java语言提供了八种基本数据类型,分为三类,分别为六个数值类型、一个字符类型和一个布尔类型,其中数值类型还分为整数类型和浮点数类型,如下表所示:
byte
byte数据类型是8位、有符号的,以二进制补码表示的整数
最小值是 -128(-2^7)
最大值是 127(2^7-1)
默认值是 0
byte类型用在大型数组中节约空间,主要代替整数,因为byte变量占用空间只有int类型的四分之一
例子:
⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄ 当时学的时候一直在想不是8位吗,那为什么是2的7次方不是2的8次方呢!?
现在明白了,因为有一位表示的是符号(0:+ 、1:-),用来判断是正数还是负数。
⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄ 01111111转换为十进制 = 127 = 2^7 - 1,也就是正数的最大值了,那为什么最小值不是11111111(也就是-127)呢?
那么再看一眼tyte的特性,它是有符号的以二进制补码表示的整数。
个人对补码的概念不是很了解,就百度搜了一下。
二进制原码没什么好说的。
二进制反码:对除符号位外的其余各位逐位取反,反码的取值空间和原码相同且一一对应。
二进制补码:就是对反码加1,而正数不变。
注意:正数的原码、反码、补码是一样的。
例如:
那这些二进制的码到底有什么用呢?请看二进制补码
里面写的很详细,就是用来正负数相加的。
好了不扯了,回到问题。
0只有一个补码0000 0000(听说可以证明的),如果是这样,那么1000 0000就不会表示成-0的补码。
即:补码1000 0000唯一的表示-128。
在补码中用(-128)代替了(-0),所以补码的表示范围为: (-128~0~127)共256个。
注意:(-128)也有相对应的原码和反码, 它的反码是(11111111)原码仍然是(10000000)(-128)。
short:
short数据类型是16位、有符号的以二进制补码表示的整数
最小值是 -32768(-2^15)
最大值是 32767(2^15-1)
默认值是 0
short数据类型也可以像byte那样节省空间。一个short变量是int型变量所占空间的二分之一
例子:
int:
int数据类型是32位、有符号的以二进制补码表示的整数
最小值是 -2,147,483,648 (-2^31)
最大值是 2,147,483,647 (2^31-1)
默认值是 0
一般的整型变量默认为int类型
例子:
long:
long数据类型是64位、有符号的二进制补码表示的整数
最小值是 -9,223,372,036,854,775,808(-2^63)
最小值是 9,223,372,036,854,775,807(2^63-1)
默认值是 0
这种类型只要使用在需要比较大整数的系统上
例子:
float:
float数据类型是单精度、32位、符合IEEE 754标准的浮点数
float在存储大型浮点数组的时候可节省内存空间
默认值是 0.0f
浮点数不能用来表示精确的值,如货币
例子:
⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄ 同样和int类型一样占用4个字节,int类型的范围是-2^31 ~ 2^31-1,31次方明显比38次方小很多,为什么同样float能这么大!?
看了网上的相关视频,初步了解是因为浮点数存在舍入误差。
double:
double数据类型是双精度、64位、符合IEEE 754标准的浮点数
浮点数默认类型为double类型
默认值是 0.0d
浮点数不能用来表示精确的值,如货币
例子:
boolean:
boolean数据类型表示一位的信息
只有两个只:true和false
默认值是 false
这种类型只作为一种标志来记录true/false情况
例子:
char:
char类型是一个单一的16位Unicode字符
最小值是’\u0000’(即为0)[十六进制]
最大值是’\uffff’(即为65,535)
char数据类型可以储存任何字符
例子:
变量就是申请内存来存储值。也就是说,当创建变量的时候,需要在内存中申请空间。内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据。因此,通过定义不同类型的变量,可以在内存中存储整形、小数或者字符。
Java的两大数据类型:
内置数据类型(基本数据类型)
引用数据类型
内置数据类型(基本数据类型)
Java语言提供了八种基本数据类型,分为三类,分别为六个数值类型、一个字符类型和一个布尔类型,其中数值类型还分为整数类型和浮点数类型,如下表所示:
分类 | 数据类型 |
---|---|
数值类型 (整数类型) | byte |
数值类型 (整数类型) | short |
数值类型 (整数类型) | int |
数值类型 (整数类型) | long |
数值类型 (浮点数类型) | float |
数值类型 (浮点数类型) | double |
字符类型 | char |
布尔类型 | boolean |
byte数据类型是8位、有符号的,以二进制补码表示的整数
最小值是 -128(-2^7)
最大值是 127(2^7-1)
默认值是 0
byte类型用在大型数组中节约空间,主要代替整数,因为byte变量占用空间只有int类型的四分之一
例子:
byte a = 100 ;
类型 | 占用空间 | 取值范围 |
---|---|---|
byte(字节型) | 1字节 (8位) | -128 ~ 127 |
现在明白了,因为有一位表示的是符号(0:+ 、1:-),用来判断是正数还是负数。
⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄ 01111111转换为十进制 = 127 = 2^7 - 1,也就是正数的最大值了,那为什么最小值不是11111111(也就是-127)呢?
那么再看一眼tyte的特性,它是有符号的以二进制补码表示的整数。
个人对补码的概念不是很了解,就百度搜了一下。
二进制原码没什么好说的。
二进制反码:对除符号位外的其余各位逐位取反,反码的取值空间和原码相同且一一对应。
二进制补码:就是对反码加1,而正数不变。
注意:正数的原码、反码、补码是一样的。
例如:
十进制数 | 二进制原码 | 二进制反码 | 二进制补码 |
---|---|---|---|
1 | 00000001 | 00000001 | 00000001 |
-1 | 10000001 | 11111110 | 11111111 |
里面写的很详细,就是用来正负数相加的。
好了不扯了,回到问题。
0只有一个补码0000 0000(听说可以证明的),如果是这样,那么1000 0000就不会表示成-0的补码。
即:补码1000 0000唯一的表示-128。
在补码中用(-128)代替了(-0),所以补码的表示范围为: (-128~0~127)共256个。
注意:(-128)也有相对应的原码和反码, 它的反码是(11111111)原码仍然是(10000000)(-128)。
short:
short数据类型是16位、有符号的以二进制补码表示的整数
最小值是 -32768(-2^15)
最大值是 32767(2^15-1)
默认值是 0
short数据类型也可以像byte那样节省空间。一个short变量是int型变量所占空间的二分之一
例子:
short a = 1000 ;
类型 | 占用空间 | 取值范围 |
---|---|---|
short(短整型) | 2字节 | -2^16 ~ 2^16-1 |
int数据类型是32位、有符号的以二进制补码表示的整数
最小值是 -2,147,483,648 (-2^31)
最大值是 2,147,483,647 (2^31-1)
默认值是 0
一般的整型变量默认为int类型
例子:
int a = 100000 ;
类型 | 占用空间 | 取值范围 |
---|---|---|
int(整形) | 4字节 | -2^31 ~ 2^31-1 |
long数据类型是64位、有符号的二进制补码表示的整数
最小值是 -9,223,372,036,854,775,808(-2^63)
最小值是 9,223,372,036,854,775,807(2^63-1)
默认值是 0
这种类型只要使用在需要比较大整数的系统上
例子:
long a = 100000L ;
类型 | 占用空间 | 取值范围 |
---|---|---|
long(长整型) | 8字节 | -2^63 ~ 2^63-1 |
float数据类型是单精度、32位、符合IEEE 754标准的浮点数
float在存储大型浮点数组的时候可节省内存空间
默认值是 0.0f
浮点数不能用来表示精确的值,如货币
例子:
float f = 234.5f ;
类型 | 占用空间 | 取值范围 |
---|---|---|
float(单精度) | 4字节 | -3.4028235×10^38 ~ -3.4028235×10^38 |
看了网上的相关视频,初步了解是因为浮点数存在舍入误差。
double:
double数据类型是双精度、64位、符合IEEE 754标准的浮点数
浮点数默认类型为double类型
默认值是 0.0d
浮点数不能用来表示精确的值,如货币
例子:
double d = 234.5 ;
类型 | 占用空间 | 取值范围 |
---|---|---|
double(双精度) | 8字节 | -1.797693×10^308 ~ -1.79769313×10^308 |
boolean数据类型表示一位的信息
只有两个只:true和false
默认值是 false
这种类型只作为一种标志来记录true/false情况
例子:
boolean b = true ;
类型 | 占用空间 | 取值范围 |
---|---|---|
boolean(布尔型) | 1字节 | false、true |
char类型是一个单一的16位Unicode字符
最小值是’\u0000’(即为0)[十六进制]
最大值是’\uffff’(即为65,535)
char数据类型可以储存任何字符
例子:
char c = 'S' ;
类型 | 占用空间 | 取值范围 |
---|---|---|
char(字符型) | 1字节 | 0 ~ 65535 |
相关文章推荐
- 简单的java Socket 例子
- 解决java mail发送TXT附件被直接显示在正文中的问题
- JDK,JRE,JVM区别与联系
- JAVA学习记录 -- 线程Ⅰ
- Java工程师成神之路
- 2015年阿里巴巴中间件比赛rpc框架
- KeeCMS框架
- JDBC(Java DataBase Connectivity)连接到MySQL
- Java学习笔记2016.2.18 接口续、单例模式
- SpringMVC中在web.xml中添加中文过滤器的写法
- java5中原子型操作类的应用
- Java线程池应用
- 【笔记】java获取文件扩展名
- Java三大特性——继承,封装和多态
- eclipse 安装activiti 插件
- java中的多线程
- Java基础笔记 – 线程同步问题(转)
- Servlet基本概念
- Java基本数据类型
- Java 线程停止