变量概念如下:

变量定义语法:
变量类型 变量名=变量值
代码示例如下:

上图代码中tomAge也可以写成Tom_Age或者TomAage,从语法上是没有问题的,但是从代码规范来说,这是不符合编程规范,变量名通常用小写字母单词开头小驼峰命名。
数据类型划分
- 基本数据类型(四类八种)
- 引用数据类型
基本数据类型

上图缺省值指的是没有赋值时给的默认值,代码示例如下:
定义一个静态的全局变量age,没有给初始值,打印结果默认是 0

注意:
-
为什么age要加static,因为静态方法不能调用非静态变量,静态方法只能调用静态变量
如下图报错
image.png
2.为什么定义全局变量age,而不是在main方法里定义一个局部变量-》因为局部变量必须初始化,否则会报错

3.所有的静态方法里面不能定义static静态的局部变量,否则编译会报错

整型
代码示例1如下:
byte a = 127;// byte 类型 取值范围-128到127
byte b = 128;
eclipse ->byte b=128;这行代码会报错,报错信息如下
Type mismatch: cannot convert from int to byte
意思是:不能将int类型转换成 byte类型
因为:Java中数字默认类型是int类型,所以128默认的是int类型,将一个int类型赋值个byte类型-》转换失败,这是因为128超出了byte的取值范围(超出范围是不可以强转的)
代码示例2如下:
int c = 2147483647;// int 类型取值范围 最大是2147483647
int d = 2147483648;// 此处会报错,因为超出范围
long e = 2147483648;// 此处会报错,取值虽然没有超出long的范围,但是默认的是int类型,所以如果想用long接收,需要加L
long f = 2147483648L;// long类型接收超出int范围的int类型的数据,需要加L
long g = 100;// 此处没有报错,因为默认的是int类型,而100又没有超出int范围所以不会报错(隐式转型即向上转型)(注意:这里100是long类型)
上面int d = 2147483648;long e = 2147483648;这两句代码会报错,报错信息都是下面的信息
The literal 2147483648 of type int is out of range
原因:
1.虽然定义的是long类型,但是Java程序默认的是int类型,所以想要接收一个超出int范围的数据,需要加L(小写大写都可以,但是一般都大写),如果没有超出int范围,可以用long类型接收(隐式转型即向上转型)
2. 定义一个long 类型变量,暂时只是放在栈内存中,而2147483648这样的数值,Java默认的是int类型,所以堆内存中给2147483648数值开辟空间是以int类型,所以数值超出int范围,会报错,如果加L,开辟空间时就是以long类型开辟空间
向下转型: 数据没有超出范围可以向下转,否则可能会数据溢出
long a=100;
int b=a;//long类型不能直接赋值给int类型(虽然100没有超出int范围,但是也不能直接赋值,需要向下转型)
int c=(int) a;//long转成int(大转小,叫向下转型)
如下图代码 214748364000超出了int取值范围,如果进行向下转型,导致数据溢出
long e = 214748364000L;
int m = (int) e;
System.out.println(m);//打印结果是:-800
字符
单字符用 char ,且用单引号
字符串用string ,且用双引号
不能把string 类型赋值给char,会报错
char c="aa";//此处会报错
Type mismatch: cannot convert from String to char
意思是不能string类型转成char类型
浮点型
Java中浮点型数据默认的是double类型,如果需要用float类型接收,需要加f(大写小写都可以)
下图点击Add cast to float 会自动加上强转代码

上图代码如下:
float f = 3.4;// 此处会报错,因为默认的是double类型,需要向下转型或者加f
double f2 = 3.4;// 此处正确,因为默认的是double
float f3 = 3.4F;// f大写小写都可以
float f4 = (float) f;// 此处进行强转
同样的浮点型超出float范围,如果向向转型即转成float,也会溢出,如下打印结果就是Infinity,没有超出范围,打印的结果就是对的
double f5 = 5000000000000000546666666666666666666666663435333333333333333333.856666666666666666666;
float f6 = (float) f5;
System.out.println(f6);//输出Infinity
总结
数据类型强转-> 转换规则:
从低位类型到高位类型自动转换-》隐式转换
1.char ->int :转成ASCII码
2.byte->short->int->long
基本数据类型->字符串(特殊)
从高位类型到地位类型需要强制类型转换
float a=(float)10.5;
网友评论