数据类型
强类型语言
强类型语言是一种强制类型定义的语言,一旦某一个变量被定义类型,如果不经过强制转换,则它永远就是该数据类型了,强类型语言包括Java、.net 、Python、C++等语言。
弱类型语言
弱类型语言是一种弱类型定义的语言,某一个变量被定义类型,该变量可以根据环境变化自动进行转换,不需要经过显性强制转换。弱类型语言包括vb 、PHP、javascript等语言。
Java的数据类型分为两大类
基本数据类型(primitive type)
1、整型(byte、short 、int 、long)
虽然byte、short、int、long 数据类型都是表示整数的,但是它们的取值范围可不一样。
//整数
byte num1 = 10;
short num2 = 100;
//最常用
int num3 = 1000;
//long 类型需要在数据后加个l或L
long num4 = 10000L;
2、浮点型(float 、 double)
float 和 double 都是表示浮点型的数据类型,它们之间的区别在于精确度的不同。
//小数:浮点数
//float类型要在数字后面加个f或F
float num5 = 3.14F;
double num6 = 3.1415926;
3、字符型(char)
//字符,字符使用单引号
char name = 'A'
4、布尔型(boolean)
//布尔值:是true非false
boolean flag = true;
//boolean flag = false;
引用数据类型(reference type)
二、八种基本数据类型
| 数据类型 | 说明 | 占用字节 | 默认值 | 封装器类 | 取值范围 |
|---|---|---|---|---|---|
| byte | 字节型 | 1 | 0 | Byte | (-2^7) 到 (2^7-1) |
| short | 短整型 | 2 | 0 | Short | (-2^15) 到 (2^15-1) |
| int | 整型 | 4 | 0 | Integer | (-2^31) 到 (2^31-1) |
| long | 长整型 | 8 | 0L | Long | (-2^63) 到 (2^63-1) |
| float | 单精度浮点型 | 4 | 0.0f | Float | (3.402823e+38)到(1.401298e-45) |
| double | 双精度浮点型 | 8 | 0.0d | Double | (1.797693e+308)到(4.9000000e-324) |
| char | 字符型 | 2 | \u0000(空格) | Character | 0~65535 (‘ /u0000’ ~’uFFFF‘) |
| boolean | 布尔型 | 1 /8 | false | Boolean | true 、false |
字节
-
位(
bit):是计算机内部数据存储的最小单位 -
字节(
byte):是计算机中数据处理的基本单位,习惯上用大写B来表示 -
1B(byte,字节) = 8bit(位) -
字符:是指计算机中使用的字母、数字、字和符号
-
1bit 表示1位
-
1Byte表示一个字节 1B=8b
-
1024B=1KB
-
1024KB=1MB
-
1024MB=1GB
进制的表示
日常生活中有很多进制的例子,例如:
- 一分钟六十秒,逢六十进一,就是六十进制;
- 一天二十四小时,逢二十四进一,就是二十四进制;
- 一星期七天,逢七进一,就是七进制;
- 一年十二个月,逢十二进一,就是十二进制;
- 小学数学是逢十进一,就是十进制;
- 而计算机中的数据只有 0 和 1,逢二进一,就是二进制。
人类为什么最习惯用十进制
人类为什么最习惯用逢十进一的十进制?对于世界上大部分的国家,即便之前因为交通不发达,他们彼此之间并不知道在世界的某一个角落还有另一个民族的存在,但是他们使用的都是十进制!这是为什么?
原因很简单,就是因为我们都有十个手指!进制的起源是用于记数的,人类刚开始都是用手指计数的。即使是现在的小朋友算数也还是喜欢用手指,所以人类最习惯用十进制。
计算机为什么用的是二进制
那么为什么计算机使用的是二进制呢?
因为二进制从硬件上比较容易实现。任何事物最少也有两种不同的状态,所以区分成两种状态比较容易。但是要将一个硬件硬生生地区分成十种不同的状态,这个就太难、太复杂了。
所以进制就是逢几进一,r 进制就是逢 r 进一。计算机只能识别二进制,人类最习惯使用的是十进制,而为了实际需要,又建立了八进制和十六进制。八进制就是逢八进一,十六进制就是逢十六进一。
二进制
二进制为逢二进一,它只有 0 和 1 两个基数。逢二进一的意思就是:
- 1 再加 1 就变成 10,即向前进了一位,原来的 1 变成 0;
- 再加 1 就是 11;
- 再加 1 又逢二,再往前进一位,进一位后第二个 1 又逢二再进位,就是 100 了;
- 再加 1 变成 101,再加 1 变成 110,再加 1 变成 111,再加 1 变成 1000……
二进制和十进制有一个对应的关系
| 十进制 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|---|---|---|---|---|---|---|---|---|---|
| 二进制 | 0 | 1 | 10 | 11 | 100 | 101 | 110 | 111 | 1000 |
无论是十进制、二进制、八进制还是十六进制,都只是计数的一种方式,只不过它们用的是不同的进制,所以表现形式不一样,但本质上都是同一个数字。理解了上面内容,后面很多知识就很容易理解了。
八进制就是逢八进一,它只有 0、1、2、3、4、5、6、7 这八个基数。
十六进制肯定有十六个基数。它的基数除了十进制的 09 之外,还有字母 AF,总共加起来是十六个。注意,字母不区分大小写。十六进制是逢十六进一,F 是十五,加 1 就变成十六了,逢十六就进一,即 0x10。
下面是常用进制对照表,大家可以看一下。
| 十进制 | 二进制 | 八进制 | 十六进制 |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 1 | 1 | 1 | 1 |
| 2 | 10 | 2 | 2 |
| 3 | 11 | 3 | 3 |
| 4 | 100 | 4 | 4 |
| 5 | 101 | 5 | 5 |
| 6 | 110 | 6 | 6 |
| 7 | 111 | 7 | 7 |
| 8 | 1000 | 10 | 8 |
| 9 | 1001 | 11 | 9 |
| 10 | 1010 | 12 | A |
| 11 | 1011 | 13 | B |
| 12 | 1100 | 14 | C |
| 13 | 1101 | 15 | D |
| 14 | 1110 | 16 | E |
| 15 | 1111 | 17 | F |
在Java代码中的表示
int i = 10; //十进制的数字10 逢十进一
int i2 = 010; //八进制的8 逢八进一
int i3 = 0x10; //十六进制的16 逢十六进一
浮点数扩展
float f = 0.1f; //0.1
double d = 1.0/10; //0.1
/*
== 是判断两个基本类型是否相等
按理来说:f和d两个值是相等的
但是,输入结果却是false,说明两个值不相等
*/
System.out.println(f == d);
float f1 = 213213213123312f;
float f2 = f1 + 1;
/*
按理来说:f1和f2两个值是不相等相等的
但是,输入结果却是true,说明两个值相等
*/
System.out.println(f1 == f2);
float 是有限的,也是离散的,接近但不等于
字符扩展
char c1 = 'a';
char c2 = '中';
//输出字符:a
System.out.println(c1);
/*
(int)c1 表示数据强制转换,把字符类型转换为整型int
输出结果:97
*/
System.out.println((int)c1);
//输出字符:中
System.out.println(c2);
//输出结果:20013
System.out.println((int)c2);
char c3 = '\u0061';
//输出结果:a
System.out.println(c3);
所有的字符本质还是数字
编码Unicode表中会表示有数字和字符的对应关系
转移字符
| 转义字符 | 意义 | ASCII码值(十进制) |
|---|---|---|
| \a | 响铃(BEL) | 007 |
| \b | 退格(BS) ,将当前位置移到前一列 | 008 |
| \f | 换页(FF),将当前位置移到下页开头 | 012 |
| \n | 换行(LF) ,将当前位置移到下一行开头 | 010 |
| \r | 回车(CR) ,将当前位置移到本行开头 | 013 |
| \t | 水平制表(HT) (跳到下一个TAB位置) | 009 |
| \v | 垂直制表(VT) | 011 |
| \ | 代表一个反斜线字符''' | 092 |
| ' | 代表一个单引号(撇号)字符 | 039 |
| " | 代表一个双引号字符 | 034 |
| ? | 代表一个问号 | 063 |
| \0 | 空字符(NUL) | 000 |
| \ddd | 1到3位八进制数所代表的任意字符 | 三位八进制 |
| \xhh | 十六进制所代表的任意字符 | 十六进制 |
注意:
1. 区分,斜杠:"/" 与 反斜杠:"" ,此处不可互换