数据类型-变量-常量-字面量

数据类型-变量-常量-字面量

【摘要】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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
数据类型 变量名 [= 初始值];			[]代表可以省略
变量名,由字母、数字、_组成,并且不能以数字开头。
如:i,a,ai,haha,a5...

注:给变量命名时尽肯能地有意义[见名知意]

如:定义一个变量来存储年龄
int age;//变量没有初始化
age = 10;//给变量赋值

以上两行语句也可以合在一起:
int age = 10;

//定义一个长整型变量,并初始化为100.
long a = 100L; //长整型字面量以L或l结尾

//定义一个浮点数变量
double height = 176.5;

//单精度浮点
float weight = 68.5F;//以F或f结尾

常量

常量[literal],是不变的变量。
语法:

1
2
3
4
5
6
7
8
9
10
final 数据类型 常量名 = 初始值;
如:
int i = 100;
i = 90;//ok
final int J = 200;//常量
J = 230//error
注:
常量名一般采用大写字母。
如:
final String MSG = "hahaha";

字面量

字面量[constant],“双引号括起来的”,就是字面本身的量。

1
2
3
4
只有8种基本类型以及字符串String才有字面量。
如:1,4,5,100Ltrue,false,'a',"abc";

作用:用来给变量或者常量赋值。

相关知识

了解计算机存储数据的方式

1
2
3
计算机存储数据的方式采用二进制【由01组成】
规定每8位为一个字节。
这样,1个字节所能表达的状态有:2^8=256

有关字符的表达方式

在Java中,字符使用单引号括起来,它有如下三种表达方式:
A.普通表达方式,每对单引号中只能有唯一的字符

1
char c1 = 't';

B.特殊字符表达式[使用转义符转义过的]

1
2
3
4
5
6
7
8
char c3 = '\t';//制表符
这类特殊字符有:
'\r' 回车
'\n' 换行
'\'' 单引号
'\\' 反斜杠
'\"' 双引号
...

C.采用UNICODE字符表示法

1
2
3
4
5
6
7
语法:'\u 4位16进制表示法'
如:
char c1 = '我';
改成unicode表示法:
char c1 = '\u6211';
通过jdk提供的 native2ascii.exe命令可以把任意的中文转换成unicode字符码
ctrl + C 退出

字符是一种特殊的整数。
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
    4
    byte b1 = 12;
    int i = b1;//ok
    char c = 'a';
    i = c;//ok,结果是 97
  • 显示类型转换【强制类型转换】
    当大范围变量、字面量赋值给小范围变量时发生。
    语法:(新类型)变量或者表达式或者字面量

    1
    2
    3
    int i = 97;
    char c = i;//error,有可能丢失精度
    char c = (char)i;//ok,做了强制类型转换

    结束语

尽量不要用记事本去存储UTF-8格式的文件。谢谢您的阅读!

评论