写在之前:
创建一个Hero对象会用到new关键字,但是给一个基本类型变量赋值却不是用new. 因为基本类型是Java语言里的一种内置的特殊数据类型,并不是某个类的对象。
给基本类型的变量赋值的方式叫做 字面值
正文:
当以l或者L结尾的时候,一个整数字面值是long类型,否则就是int类型。 建议使用大写的L而非小写的l,因为容易和1混淆。
byte,short,int和long的值都可以通过int类型的字面值来创建。整数的字面值可以用如下四种进制来表示:
十进制: 基 10, 包含从0-9的数字,平常用的就是这种
十六进制: 基 16, 包含从0-9的数字,和从A-F的字母。
八进制: 基 8, 包含从0-7的数字
二进制: 基 2, 包含0和1。(从 JAVA7开始就可以创建 二进制的字面值了)
e2表示10的二次方,即100
1.234e2 = 1.234x100
float类型数字后加F或f;
double可以不用加;
字符的字面值放在单引号中 ’ ’
字符串的字面值放在双引号中 " "
需要注意的是,\表示转义,比如需要表示制表符,回车换行,双引号等就需要用 \t \r \n " 的方式进行
类型转换:
低精度转高精度随便转
高精度转低精度会溢出
强制转换风险自担。
byte<short=char<int<long<float<double
虽然short和char都是16位的,长度是一样的
但是彼此之间,依然需要进行强制转换
直接进行转换,会出现编译错误
以下转换是错误的
public class Hero {
public static void main(String[] args) {
//高精度向低精度转换
byte s1=1;
byte s3=2;
byte b3=s1+s3;
System.out.println(b3);
}
}
因为s1+s3得出的结果默认为int类型,所以要对整体结果(byte)(s1+s3)进行强制转换。