1. 字面常量
字面常量的分类:
- 字符串常量:由双引号""引起来的,如“12345”、“hello”、“你好”
- 整形常量:程序中直接写的数字(注意没有小数点),比如:10、200
- 浮点数常量:程序中直接写的小数,比如:3.14、0.49
- 字符常量:由 单引号 " 引起来的,被当做字符,比如:‘A’、‘1’
- 布尔常量:true或false
- 空常量:null
2. 数据类型
在Java中数据类型主要分为两类:基本数据类型和引用数据类型。
基本数据类型有四类八种:
/**
* 输出不同类型的最小取值范围和最大取值范围
* 会用到包装类(此类型的plus版本)
*/
public class TestDemo {
public static void main(String[] args) {
//byte ->Byte
System.out.println(Byte.MIN_VALUE );
System.out.println(Byte.MAX_VALUE);
//short ->Short
System.out.println(Short.MIN_VALUE );
System.out.println(Short.MAX_VALUE);
//int ->Integer
System.out.println(Integer.MIN_VALUE );
System.out.println(Integer.MAX_VALUE);
//long ->Long
System.out.println(Long.MIN_VALUE );
System.out.println(Long.MAX_VALUE);
//char ->Character
System.out.println(Character.MIN_VALUE );
System.out.println(Character.MAX_VALUE);
}
}
注意: 在Java中,
- 数据类型的大小不分x86和x64,大小都是一样的。
- 整型和浮点型都是有符号数字,最高位就是符号位。【如:int,4个字节,32个比特位,则最高位为符号位,只有31个比特位为数值位,则取值范围为(-2^31-2^31-1)】
- 整型默认为int型,浮点型默认为double
- 浮点型也有范围,但一般不关注
3. 变量
数据类型就是用来定义不同种类的变量的。
3.1 整型变量
3.1.1 整型变量
1. 在Java中,没有所谓的全局变量,局部变量在使用前一定要初始化,否则程序会报错。
2. 在定义int型变量时,所赋值不能超过int的范围,否则程序会报错
3.1.2 长整型变量
为了区分int和long类型,一般建议:long类型的变量赋值时末尾加上L或l,推荐L
为什么long类型的变量赋值时末尾要加上L呢?
加L不是必须的,但是最好加上。(这个可以和下面float必须加上 f 进行一个比较)
因为整型常量默认是int类型的,比如:将3赋给long类型的a时,3是int型,a是long型,小类型到大类型,会发生自动类型转换,所以加L不是必须的,加不加此程序都可以运行,程序不会报错。
那为什么最好要加上呢?
比如:我将2,147,483,648赋给long类型的a,long类型是可以放下这个值的,但是不加L,程序会认为2,147,483,648是一个int型的值,它超出了int类型值的范围,就会报错。加上L程序就可以运行。为了防止这种情况出现,最好加上L。
3.1.3 短整型变量(-32768 ~ 32767)
因为整型常量默认是int类型的,short类型的取值范围是(-32768 ~ 32767)
所以将(-32768 ~ 32767)此范围内的值赋给short类型的a时,大类型到小类型,在整型中,会发生截断,程序不报错。若赋值超过了此范围,就会报错。因为编译器不允许将一个超出此类型范围的字面值赋给此类型变量。这时强制类型转换成short就不会报错了,但此操作相当于强制截断,输出的也不是原来的数值了。
3.1.4 字节型变量(-128 ~ 127)
3.2 浮点型变量
3.2.1 双精度浮点型
- 浮点数与整数在内存中的存储方式不同,不能单纯使用2^n 的形式来计算
- double 类型的内存布局遵守 IEEE 754 标准(和C语言一样), 尝试使用有限的内存空间表示可能无限的小数, 势 必会存在一定的精度误差,因此浮点数是个近似值,并不是精确值。
3.2.2 单精度浮点型
为什么float类型的变量赋值时末尾要加上f呢?
加 f/F 是必须的,不加程序就会报错。
因为浮点型常量默认是double类型的,比如:将3.14赋给float类型的a时,3.14是double型,a是float型,大类型转换为小类型,这是浮点型,不是整型,浮点型和整形在内存中的存储形式是不同的,不会发生截断,编译器直接会报错。要想不报错:末尾加上 f 或者强制类型转换
3.3 字符型变量(2个字节)
- Java 中使用 单引号 + 单个字母 的形式表示字符字面值
- 计算机中的字符本质上是一个整数,在 C 语言中使用 ASCII 表示字符, 而 Java 中使用 Unicode 表示字符。Unicode字符集,支持更多国家的语言,Unicode字符集更大,占2个字节,所以字符型变量占2个字节
- 一个汉字是2个字节,字符单引号里也可以放一个汉字
3.4 布尔型变量
- boolean 类型的变量只有两种取值, true 表示真, false 表示假
- Java 的 boolean 类型和 int 不能相互转换, 不存在 1 表示 true, 0 表示 false 这样的用法
3.5 类型转换
Java 作为一个强类型编程语言, 当不同类型之间的变量相互赋值的时候, 会有教严格的校验。
3.5.1 强制类型转换(显式)
当进行操作时,代码需要经过一定的格式处理,不能自动完成。
1. 当大范围类型向小范围类型赋值时,会有数据丢失,编译器****直接报错。
非要这么做的话,要进行强制类型转换, 但是可能会精度丢失
- 强制类型转换不一定能成功,不相干的类型不能互相转换
3.5.2 自动类型转换(隐式)
代码不需要经过任何处理,在代码编译时,编译器会自动进行处理。
- 当小范围类型向大范围类型赋值时,小范围类型的变量,会自动提升为大范围类型
- 当大范围类型的在小范围类型取值范围内的常量给小范围类型的变量赋值时,也会发生自动类型换。大范围类型的常量,会转换为小范围类型。
将一个字面值常量进行赋值的时候, Java 会自动针对数字范围进行检查。可行就会进行自动类型转换(如上图),不可行就直接报错(如下图)
3.6 类型提升
- 不同类型的数据之间相互运算时,数据类型小的会被提升成数据类型大的。
- 对于 short, byte 这种比 4 个字节小的类型, 会先整型提升成 4 个字节的 int , 再运算。
4.字符串类型
字符串类型属于引用数据类型
- Java当中的字符串不以 ‘\0’ 结尾
- 字符串类型+整型=字符串类型
- 当字符串和字符串或整数在一起使用+号的时候,+号就是拼接的意思 ,从左到右进行运算。
- String类型特别强大,比如在有些情况下,需要将字符串和整型进行转换:
- int转成String
- String 转成 int
版权归原作者 渡上舟(每天都要坚持学习鸭) 所有, 如有侵权,请联系我们删除。