变量
概念
- 变量就是内存当中的一块空间。
int i = 10;
//int g 编译错误: 可能尚未初始化变量xxx
int j ;
j = 12;
//int a,b,c = 30 表示声明三个int类型变量a, b没有赋值,c赋值30。
int l = 11,m = 12,n = 13;
int a,b,c;
l = 20;
m = 30;
n = 40;
//System.out.println(t);编译错误: 找不到符号
//int t = 5; 在java程序的方法体当中,代码是有执行顺序要求的,遵循自上而下的顺序依次逐行执行
j = 30;//重新赋值
//int j = 30;编译错误: 已在方法 main(String[])中定义了变量 j
类型 | 声明位置 | 从属于 | 存储位置 | 生命周期 | 初始值 |
局部变量 |
方法或者语句块内部 |
方法/语句块 | 栈帧 |
从声明位置开始,直到方法或语 句块执行完毕,局部变量消失 |
局部变量在使用前必须先声明、初始化(赋初值)再使用 |
实例变量 | 方法外,不带static | 对象 | 堆 |
对象创建,成员变量也跟着创建。 对象消失,成员变量也跟着消失 |
如果不自行初 始化,它会自动初始化成该类型的默认初始值。 |
静态变量 | 方法外、带static | 类 | 方法区 |
类被加载,静态变量就有效;类 被卸载,静态变量消失 |
如果不自行初始化,与成员变量相同会自动初始 化成该类型的默认初始值 |
显式转换和隐式转换
- 显式转换 又叫强制转换。小范围数据类型 变量=(小范围数据类型)大范围数据;int n = (int)6.7;
- 隐式转换:又叫自动转换。大范围数据类型 变量=小范围的数据; double d = 10000;
//隐式转换
short b = 12; //合法
short b = 1234567; //非法,1234567 超出了 short 的表数范围
short s1 = 1;
s1 = s1 + 1;//s1+1 进行运算时,s1自动转换成int类型,右边运算结果是int类型,经过编译器检查,两边数据类型不一致会报错。
s1 += 1;//+= 或者 ++ 运算符会执行隐式类型转换,相当于s1 = (short) (s1 + 1);
//显式转换
int x = (int)3.14 //x = 3 强制转换可能会导致精度丢失,浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入。
byte i = (byte) 128;// i = -128 字节转换可能会导致数据溢出。
int money = 1000000000; //右边的数值超过了int的范围,产生溢出行为。
类型转换的规则
1、八种基本数据类型中,除了boolean类型之外,剩下的7种类型之间都可以进行类型转换。
2、当整数型字面值没有超出byte、short、char取值范围,那么可以直接将它赋值给byte、short、char类型的变量。
3、byte short char在做数学运算的时候,各自会先转换成int类型,再做运算。
4、小容量可以自动转换成大容量。八种基本数据类型容量从小到大的顺序:
- byte < short < int < long < float < double
- < char
- char和short容量相同,都是2个字节,只不过char可以表示更大的正整数。
5、多种数据类型做混合运算,各自先转换成容量最大的类型之后再做运算。
6、大容量转换成小容量的时候,必须添加强制类型转换符,这样编译才能通过,但是运行的时候可能会损失精度。
本文来自博客园,作者:小孙不是程序员,转载请注明原文链接:https://www.cnblogs.com/sunlincode/p/16716901.html