*~~
04 变量&类型转换&运算符
~~ *
1、变量的分类
(1)局部变量:
定义在方法或方法中的某一代码块中中,只能在本方法中被访问。
使用前必须赋值。
作用域为声明变量的下方的局部范围。
(2)全局变量:
声明在类中,方法外的变量。
若在声明是没有赋初值,系统将使用默认值。
作用域为整个类。
2、static 关键字
使用 static关键字修饰的类、方法、变量 是静态的。当类被加载时就完成声明。静态区域无法直接访问外部的非静态成员变量。
3、基本数据类型
(1)字节型(byte):
①占1字节
②默认值:0
③取值范围:-128 ~ 127
(2)短整型(short):
①占2字节
②默认值:0
③取值范围:-215~215-1
(3)整型(int):
①占4字
②默认值:0
③取值范围:-231 ~ 231 -1
(4)长整型(long):
①占8字节
②默认值:0L
③取值范围:-263 ~ 263 -1
(5)单精度浮点型(float):
①占4字节
②默认值:0.0f
③精度:小数点后有效位数6 ~ 7 位
(6)双精度浮点型(double):
①占8字节
②默认值:0.0
③精度:
(7)字符型(char):
①占2字节,一次只能存储一个字符,中文为一个字符
②默认值:’\u0000’
③取值范围:0 ~ 65535
(8)布尔型(boolean):
①占1 bit
②默认值:false
③取值范围:true/false
4、类型转化
(1)隐式转换
精度低的数据类型向精度高的数据类型转换时,会自动完成类型转换,称为隐式转换。
(2)强制类型转换
当精度高的数据类型向精度低的数据类型向精度低的数据类型转换时,可能会发生精度丢失的情况,所以编译器会直接报错。
如果非要进行转换则必须使用强制类型转换。
格式:(目标数据类型) 变量
注:当int型数据向byte、short进行数据类型转换时:
如果是直使用常量数值进行转换,在byte、short 最大表示范围内会发生隐式类型转换,若超出标识范围,则必须使用强制类型转换。
如果是使用变量进行转换,则直接报错,因为编译器会进行语法检查,认为有可能发生精度丢失,不会去考虑变量内具体的值。
byte和short进行运算时,会自动转换为int型
5、表达式
由一系列常量、变量、运算符、()组成的算式
表达式结果的类型与表达式内参与运算的精度最高的类型一致。
6、运算符
(1)算术运算符(ArithmeticOperators):(+、-、、/、%、++、–)
①+ (加运算):可以做加法运算,也可以做连接运算——当表达式内有字符串参与运算时,字符串前的是加法运算,字符串后则是连接运算。
②- (减运算):
③ (乘法运算):
④/ (整除法运算):
⑤% (求模/取余):
⑥++ (自增)、-- (自减):
1)只能用于变量
2)放在变量前面:先自增在赋值;放在变量后面,先赋值再自增
注:运算的结果的类型与参与运算的数值、变量精度最高的一致。
(2)赋值运算符(AssigningOperator):(=、+=、-=、*=、/=、%=)
注:除了直接赋值(=)外,其他赋值运算都表示累计的意思,会进行数据类型的强转。如果超出精度低的数据类型的最高表示范围,会进行循环进位,直到能够爱将精度高的数据存放为止。
(3)比较运算符(ComparisonOperators):(==、!=、>、<、>=、<=)
(4)三目运算符(TernaryOperator)(X?Y:Z)
①概念:
X为表达式,值为true或false
Y、Z可以使表达式,值(数值型、字符串型,字符型等)
当X为true时,执行Y或返回Y的值,当X为false时,执行Z的语句或返回Z的值
②用法:
1)作为语句System.out.println();的输出结果
2)使用变量接收:
a.Y、Z的数据类型必须相同
(5)逻辑运算符(LogicalOperators)?&、|、&&、||^、~、!)
①& (与):两端为true则整个表达式为true。可以做逻辑运算,也可以做位运算,视运算符两端的数据类型所决定,没有短路功能,运算符两端的表达式都要运算。
②| (或):两端有一端为true则整个表达式为true。没有短路功能,运算符两端的表达式都要运算。
③&&(双与):两端为true则整个表达式为true。只能做逻辑运算,拥有短路功能,左端为假,则整个表达式为假,右端不在运算。
④||(双或):两端有一端为true则整个表达式为true。拥有短路功能,左端为真,则整个表达式为真,右端不在运算。
⑤^(异或):两端不同为true,相同为false
⑥!(非):本来是true,变为false;本来为false,变为true
注:逻辑运算的结果为布尔型(boolean)
(6)位运算符(BitOperator)(了解):(&、|、^、~、<<、>>、>>>)(针对二进制)
①& (按位与):同为1,结果为1,否则为0
②|(按位或):有一个为1,结果就为1
③^(按位异或):不相同,结果为1,否则结果为0
④~ (按位求反):
⑤<<(左移):将二进制向左移动n位
⑥>>(带符号右移):将二进制向右移动n位
⑦>>>(无符号右移):
7、错误题
public class TestAuto{
public static void main(String[] args){
int i = 3;
System.out.println(i);//3
i = i++;//①
System.out.println(i);//3
i = ++i;//②
System.out.println(i);//4
int j = i++ + ++i + i++;
System.out.println(“i=” + i + “;j=” + j);//i=7;j=16
}
}
① i = i ++;首先将i的值3取出来放到i++中,i++的值为3;然后i自增1,i的值为4;最后将i++的值3赋值给i,i的值为3。
② i = ++i; 首先将i的值取出来加 1 后赋值给 ++i,++i的值为 4;然后i自增1,i的值为4;最后将 ++i 的值4 赋值为 i,i 的值为4。
注:将i++ 和 ++i看做一个整体,相当于一个独立的变量。