数据类型-变量-常量-字面量
【摘要】Java语言是静态类型的,也就是说所有变量和表达式的类型在编译时就已经完全确定。
前言
记得之前学这一块的时候,老师告诉我们“数据类型”不只是“数据类型”而是“数据”和“类型”,叫我们好好体会~
直到今天我还在假装明白~
数据类型
废话不多说,在Java中数据类型分为两大类:基本类型和对象类型。
基本类型(8种)
类型 | 占用字节 | 取值范围 |
---|---|---|
byte | 1个字节 | [-128,+127] |
short | 2个字节 | [-32,768,+32,767] |
int | 4个字节 | [-2,147,483,648,+2,147,483,647] [-2^31,+2^31-1] |
long | 8个字节 | [-2^63,+2^63-1] 10^19 |
char | 2个字节 | 一种特殊的整数,范围同short |
double | 8个字节 | 10^308 |
float | 4个字节 | 10^38 |
boolean | 1个字节 | 只有2个值,true和false |
- 在Java中,最高位代表符号位,1位负,0为正。以8位二进制为例,所以:
二进制 | 十进制 |
---|---|
0 000 0000 | 0 |
0 111 1111 | +127 |
1 000 0000 | -128 |
1 111 1111 | -1 |
对象类型
所有不是基本类型的都是对象类型,如:String、System…所以,我们编写程序,也就是不断地创建类型。因为我们想表达我们要表达的数据。
变量
变量,variable,是一种可以变化的量。
语法:
1 | 数据类型 变量名 [= 初始值]; []代表可以省略 |
常量
常量[literal],是不变的变量。
语法:
1 | final 数据类型 常量名 = 初始值; |
字面量
字面量[constant],“双引号括起来的”,就是字面本身的量。
1 | 只有8种基本类型以及字符串String才有字面量。 |
相关知识
了解计算机存储数据的方式
1 | 计算机存储数据的方式采用二进制【由0和1组成】 |
有关字符的表达方式
在Java中,字符使用单引号括起来,它有如下三种表达方式:
A.普通表达方式,每对单引号中只能有唯一的字符
1 | char c1 = 't'; |
B.特殊字符表达式[使用转义符转义过的]
1 | char c3 = '\t';//制表符 |
C.采用UNICODE
字符表示法
1 | 语法:'\u 4位16进制表示法' |
字符是一种特殊的整数。
Java采用双字节编码,就意味着它可以表达 2 ^ 16 = 65536 个字符
在计算机中,要存储字符,都需要把字符转换成整数,进而成为二进制。这就需要字符映射表,也就是码表【字符集表】。
计算机中最原始的字符集是ASCII码表
,不同的码表对字符的码表是不一样的,其中,ASCII码表
采用单字节编码,也就是它最多可编256个字符。
字符 | 码值 |
---|---|
‘a’ | 97 |
‘z’ | 122 |
‘A’ | 65 |
‘Z’ | 90 |
‘0’ | 48 |
‘9’ | 57 |
中文字符集采用双字节编码,但是,为了向上兼容ASCII
码值,前256的值与ASCII
码一模一样,这样就兼容了ASCII码表
。【所有主流的字符集都会无条件向上兼容ASCII码表
】
中文字符集:
GB2312
->GBK
全球统一的字符集:
UTF-8
[支持中文],它采用动态编码技术。
所以,当文本文件的编解码不一致时,就会产生乱码。
类型转换问题
隐式类型转换
当小范围变量、字面量赋值给大范围变量时发生。如:1
2
3
4byte b1 = 12;
int i = b1;//ok
char c = 'a';
i = c;//ok,结果是 97显示类型转换【强制类型转换】
当大范围变量、字面量赋值给小范围变量时发生。
语法:(新类型)变量或者表达式或者字面量1
2
3int i = 97;
char c = i;//error,有可能丢失精度
char c = (char)i;//ok,做了强制类型转换结束语
尽量不要用记事本去存储UTF-8
格式的文件。谢谢您的阅读!