Java基础数据类型和运算符
标识符
标识符是赋给类、方法、变量……的名字。
一个标识符可以是字母、数字、下划线、美元符号的任意顺序组合,但不能以一个数字开始,也不能是关键字。
注:Java是区分大小写的,Student和student是不一样的
由于Java采用的Unicode编码,所以中文也算是字母,但是并不建议用中文做标识符
1 | int 中文 = 5; |
关键字
关键字是Java里事先定义好并赋予特殊含义的单词,也被称为保留字,标识符不能和关键字冲突。
注意:main不是关键字
常量
常量就是在程序中固定不变的值,是不能改变的数据。例如数字1,字符‘a’,浮点数3.2等。在Java中,常量包括整型常量、浮点数常量、布尔常量、字符常量等等。
1.整型常量
整型常量是整数类型的数据,有二进制,八进制,十进制和十六进制四种表示形式:
- 二进制:由数字0和1组成的数字序列,前面要以0b或0B开头,目的是为了和十进制进行区分,如0b01101100,0B10110101
- 八进制:以0开头并且其后由0~7范围内(包含0和7)的整数组成的数字序列,如0342。
- 十进制:由数字0~9范围内(包含0和9)的整数组成的数字序列,如198。
- 十六进制:以0x或0X开头并且其后由0-9,A-F(包含端点)组成的数字序列,如0X25AF
注意:在程序中为了标明不同的进制,数据都有上述的特定标识,必须遵守。
2.浮点数常量
浮点数常量就是在数学中用到的小数,分为float单精度浮点数和double双精度浮点数两种类型。其中,单精度浮点数后面以F或f结尾,双精度浮点数后面以D或d结尾。当然,也可以不加任何的后缀,此时Java虚拟机会默认为double双精度浮点数。
3.字符常量
字符常量用于表示一个字符,它可以是英文字母,数字,标点符号以及转义序列来表示的特殊字符。
1 | 'a' '1' '&' '\r' '\u0000' |
4.字符串常量
字符串常量用于表示一串连续的字符。
1 | "Hello World" "123" "Welcome \n XXX" "" |
5.布尔常量
布尔常量即布尔型的两个值true和false,该常量用于区分一个事物的真与假
6.null常量
null常量只有一个值null,表示对象的引用为空。
变量
变量的定义
在程序运行期间,随时可能产生一些临时数据,应用程序会将这些数据保存在一些内存单元中,每个内存单元都用一个标识符来标识。这些内存单元被称为变量,定义的标识符就是变量名,内存单元中存储的数据就是变量的值。
变量的数据类型
在JAVA中的变量数据类型分为两种:基本数据类型和引用数据类型。
此图从这篇博客转载而来
操作误区:
定义一个long变量时,如果用常量给他赋值,并且这个常量的值超过了int的范围,则一定要在这个常量后面加一个L或者l。
1 | long val = 9999999999999L; |
定义一个float变量时,如果用常量给他赋值,并且这个常量是小数,则必须在这个常量后面加个f或者F,因为小数会被默认为double类型的值。
1 | float val = 1.2f; |
定义一个boolean变量,只能用true或者false给他赋值,并不能用0或1去赋值。
1 | boolean flag = true; // 正确 |
变量类型的转换
1.自动类型转换
自动类型转换也叫隐式类型转换,指的是两种数据类型在转换的过程中不需要显式地进行声明。
他需要两个条件:第一,两种数据类型彼此兼容;第二,目标类型的取值范围大于源类型的取值范围(目标类型可以类比成水桶,源类型可以类比成水杯)
举例:
1 | byte b = 3; |
下面列举三种可以进行自动类型转换的情况:
- 整数类型之间可以实现转换,低取值范围的向高取值范围转换
- 整数类型可以转换成float类型。
- 其他类型可以转换成double类型。
2.强制类型转换
强制类型转换也叫显式类型转换,指的是两种数据类型之间需要进行显式地声明。
当两种类型彼此不兼容,或者目标类型的取值范围小于源类型时,自动类型转换无法进行,这时就需要强制类型转换。
1 | 目标类型 变量名 = (目标类型) 值; |
注意:在对变量进行强制类型转换时,会发生取值范围较大的数据类型向取值范围较小的数据类型的转换,如将一个int类型的数转换成byte类型,这样极其容易造成数据精度的丢失。因为两者的取值范围不同,所以小范围的数据类型会截断大范围的数据类型,造成精度丢失。
举例:
1 | int a = 128; |
3.表达式类型的自动提升
所谓表达式是指由变量和运算符组成的一个算式,变量在表达式中进行运算时,也有可能发生自动类型转换,这就是表达式数据类型的自动提升,如一个byte型的变量在运算期间类型会自动提升为int型。
1 | byte b1 = 3; |
运算符
理解一个点,其他的和c++一样,不再赘述。
| 或,|| 短路或,& 与,&&短路与
- | 或:无论左式的真假性,都要计算运算符两边的表达式
- || 短路或:当左式为真时,就判断整个式子为真,不再计算判断右式
- & 与:无论左式的真假性,都要计算运算符两边的表达式
- && 短路与:当左式为假时,就判断整个式子为假,不再计算判断右式
举例:
1 | int x = 0, y = 0, z = 0; |