文章目录
- 变量与类型
- 1.1 整型变量
- 1.2 长整型变量
- 1.3 双精度浮点型变量
- 1.4 单精度浮点型变量
- 1.5 字符类型变量
- 1.6 字节类型变量
- 1.7 短整型变量
- 1.8 布尔类型变量
- 1.9字符串类型变量
- 1.10 变量的命名规则
- 1.11 常量
- 1.12 理解类型转换
变量与类型
1.1 整型变量
基本语法格式:int 变量名 = 初始值;
int占4个字节,表示范围是 -2^31 -> 2 ^31-1
byte = 8个bit,1KB = 1024 Byte,1MB = 1024 KB,1GB = 1024MB
使用如下代码可查看整型数据范围:
注意:当int / int 时,值任为int类型。如 int 4 / 2 值为 2;int 3 / int 4 值为0!
1.2 长整型变量
语法格式: long 变量名 = 初始值;
代码示例:
long占8个字节,表示范围是 -2^63 -> 2 ^63 -1
1.3 双精度浮点型变量
语法格式: double 变量名 = 初始值;
代码示例:
double占8个字节,但是浮点数的内存布局和整数差别很大, 不能单纯的用 2 ^ n 的形式表示数据范围.例:
1.4 单精度浮点型变量
基本格式: float 变量名 = 初始值;
float占4个字节,由于表示的精度范围较小,优先考虑使用double。
1.5 字符类型变量
基本格式: char 变量名 = 初始值;
代码示例: char ch = ‘A’ ; char ch = ‘和’;
计算机中的字符本质上是一个整数. 在 C 语言中使用 ASCII 表示字符, 而 Java 中使用 Unicode 表示字符. 因此一个字符占用两个字节, 表示的字符种类更多, 包括中文.
1.6 字节类型变量
byte 变量名 = 初始值;
字节类型表示的是整数,占1个字节,表示范围 -128 -> 127
1.7 短整型变量
基本格式: short 变量名 = 初始值;
short占2个字节,表示范围较小。
1.8 布尔类型变量
注意事项:
- boolean 类型的变量只有两种取值, true 表示真, false 表示假.
- Java 的 boolean 类型和 int 不能相互转换, 不存在 1 表示 true, 0 表示 false 这样的用法.
- boolean 类型有些 JVM 的实现是占 1 个字节, 有些是占 1 个比特位。
1.9字符串类型变量
语法格式: String 变量名 = “初始值” ; 把字符放到一起就构成了字符串
String 不是基本类型, 而是引用类型。
字符串的+操作,表示字符串拼接。例
public static void main(String[] args) {
String a = "haha";
String b = "yaya";
String c = a + b;
System.out.println(c);
}
输出结果为hahayaya
1.10 变量的命名规则
硬性指标:
- 一个变量名只能包含数字, 字母, 下划线
- 数字不能开头.
- 变量名是大小写敏感的. 即 num 和 Num 是两个不同的变量.
注意: 虽然语法上也允许使用中文/美元符($)命名变量, 但是 强烈 不推荐这样做.
软性指标: - 变量命名要具有描述性, 见名知意.
- 变量名不宜使用拼音(但是不绝对).
- 变量名的词性推荐使用名词.
- 变量命名推荐 小驼峰命名法, 当一个变量名由多个单词构成的时候, 除了第一个单词之外, 其他单词首字母都大写。studenName.
1.11 常量
- 字面值常量
10 // int 字面值常量(十进制)
010 // int 字面值常量(八进制) 由数字 0 开头. 010 也就是十进制的 8
0x10 // int 字面值常量(十六进制) 由数字 0x 开头. 0x10 也就是十进制的 16
10L // long 字面值常量. 也可以写作 10l (小写的L)
1.0 // double 字面值常量. 也可以写作 1.0d 或者 1.0D
1.5e2 // double 字面值常量. 科学计数法表示. 相当于 1.5 * 10^2
1.0f // float 字面值常量, 也可以写作 1.0F
true // boolen 字面值常量, 同样的还有 false
‘a’ // char 字面值常量, 单引号中只能有一个字符
“abc” // String 字面值常量, 双引号中可以有多个字符.
1.12 理解类型转换
int a = 10;
long b = 20;
a = b; // 编译出错, 提示可能会损失精度.
b = a; // 编译通过.
int a = 10;
double b = 1.0;
a = b; // 编译出错, 提示可能会损失精度.
b = a; // 编译通过.
表示范围更小的类型能隐式转换成范围较大的类型。
使用强制类型转换:例
int a = 0;
double b = 10.5;
a = (int)b;
System.out.println(a);
a的输出结果为10,说明强制类型转换可能会导致精度丢失。
byte 和 byte 的运算:
byte a = 10;
byte b = 20;
byte c = a + b;
System.out.println(c);
// 编译报错
Test.java:5: 错误: 不兼容的类型: 从int转换到byte可能会有损失
正确的写法:
```java
byte a = 10;
byte b = 20;
byte c = (byte)(a + b);
System.out.println(c);`
结论: byte 和 byte 都是相同类型, 但是出现编译报错. 原因是, 虽然 a 和 b 都是 byte, 但是计算 a + b 会先将 a 和 b 都提升成 int, 再进行计算, 得到的结果也是 int, 这是赋给 c, 就会出现上述错误.
由于计算机的 CPU 通常是按照 4 个字节为单位从内存中读写数据. 为了硬件上实现方便, 诸如 byte 和 short 这种低于4 个字节的类型, 会先提升成 int, 再参与计算.