1. 变量定义
Java的变量声明和C的几乎一样,格式为
数据类型 变量名 = 值 ;
- 变量必须先声明,后使用
- 变量都定义在其作用域内并在作用域内使用,出了作用域就失效了
- 同一个作用域内,不可以声明两个同名变量
- 同上,一个文件内不能声明两个同名类
2. 变量类型
3 基本数据类型
3.1 整型
类型 | 占用空间 | 表数范围 |
---|---|---|
byte | 1 字节 | -128~127 |
short | 2 字节 | -2^15~2^15-1 |
int | 4 字节 | -2^31~2^31-1 |
long | 8 字节 | -2^63~2^63-1 |
- 当变量赋值超范围时,不会像C语言那样自动颠倒,而是直接报错。
- long 型变量的值必须以大写或小写的 L 结尾。
-
3.2 浮点型
| 类型 | 占用空间 | 表数范围 | 精度 | | —- | —- | —- | —- | | 单精度 float | 4 字节 | -3.403 E38 ~ 3.403 E38 | 7位有效数字 | | 双精度 double | 8 字节 | -1.798 E308 ~ 1.798 E308 | 14位有效数字 |
float 型变量的值必须以小写或大写的 F 结尾
- 通常用 double 定义浮点型。
3.3 字符型 char
char (1字符 = 2字节)。不同于C语言,java中的char代表字符而不是字节,一个字符占用2个字节。
在使用中文字符时,会出现字符编码错误的问题:
这是因为JDK是国际版的,我们在用javac编译时,编译程序首先会获得我们操作系统默认采用的编码格式(GBK),然后JDK就把Java源文件从GBK编码格式转换为Java内部默认的Unicode格式放入内存中,然后javac把转换后的Unicode格式的文件编译成class类文件,此时,class文件是Unicode编码的,它暂存在内存中,紧接着,JDK将此以Unicode格式编码的class文件保存到操作系统中形成我们见到的class文件。当我们不加设置就编译时,相当于使用了参数:javac -encoding GBK Test.java,就会出现不兼容的情况 。
因此,需要用 -encoding UTF-8 来指明使用unicode编码格式,如图:
char型变量也可以用作转移字符。
3.4 boolen型
只能有两个值,要么 true 要么 false。
4. 引用数据类型
4.1 String 型
String 可以和8中基本数据类型的变量做运算,但运算只能是连接运算 + ,且运算结果都是String类型:
要注意运算顺序的问题,当String在+号最前面时,全部的+都是拼接运算,反之,但String在后面时,String前的+号就是普通的算术运算加法
System.out.println(3+4+"Hello!"); // 7Hello!
System.out.println("Hello!"+3+4); // Hello!34
System.out.println('a'+1+"Hello!"); // 98Hello!
System.out.println("Hello!"+'a'+1); // Hello!a1
5 类型转换
5.1 自动类型(提升)转换
多个不同类型的变量作运算,运算结果至少要用其中最大的那个类型接收。换言之,小类型和大类型做算,结果自动转换为大类型。自动转换顺序为:
byte、char、short —> short —> int —> long —> float —> double
其中,bytr、char、short 三者是并列关系,即这三者做运算,结果都是 int 型。并且,这挑规则包括同种类型的运算,即 byte + byte = int 、char + char = int、 short + short = int
说明:这里的大小指的是能表示数的范围大小,而不是内存大小,比如 float 占4字节,long占8字节,但是float > long
5.2 强制类型转换
是自动类型提升的逆运算,将大类型转换为小类型。实现方法同C语言,可能出现精度损失
double d1 = 1.3415;
int i1 = (int) d1;