变量与运算符
变量的定义和初始化
什么是变量?
表示存储空间,可用来存放某一类型的常量,没有固定值,并可以重复使用。变量是内存中一块区域,可以往该区域存储数据,修改里面的数据,也可以获取里面的数据。总的来说就是占用内存;具有数据类型和变量名;在当前作用域(当前{}内)内可以重复使用,但是不能重新命名;在同一数据类型的范围内可以任意改变。
// 变量的定义初始化
int i; //定义
i = 10; //初始化
//定义和初始化可以一起进行
int j = 10; //类型名 + 变量名 = 常量 ;
表达式
表达式(expression):是由数字、运算符、括号、常量、变量等以能求得结果的组合。
// 表达式
int a = i + 10;
基本数据类型
1.数据类型:包括8大基本数据类型和引用数据类型。
基本数据类型:字节型byte,占用1位字节;短整型short,占用2位字节;整型int,占用4位字节;长整型long,占用8位字节,初始化时常量后面加L;浮点型float,占用4位字节,初始化时常量后面加F;双精度型double,占用8位字节;字符型char,占用2位字节,初始化时是单引号,切不可用双引号;布尔型boolean,占用1位字节,只有true 和 false两种结果。
引用数据类型:数组、类、接口、、、
// 列举几个定义初始化
long a = 1000000L; //长整型,后缀L,内存很大,但是也有限度,超过18位报错,整数没有后缀默认是int
float f = 3.14F; //浮点型,后缀F,小数没有后缀默认是double
2.数据类型转换:自动转换和强制转换
自动转换:占位字节小的数据类型可以自动转成占位大的数据类型,long转float除外,float底层不同所以支持long转float。转换顺序:byte、short、char(这3种数据类型互相之间不转换)→int→long→float→double。boolean只有true 和 false不参与转换。
强制转换:占位大的数据类型转占位小的数据类型。
// 自动转换
byte b = 10;
int i = b; //变量b赋值给a时自动提升到int型
short s = 10;
i = s + b; //byte,short,char参与运算时先自动转成int型,所以用int型的i来接收它们的和
double d = b + i + s + 3.14F + 3.14; //不同类型的数据进行运算时会自动转成最高位的数据类型
//强制转换
int j = (int) 3.14;
System.out.println(j); //输出3,因为把double类型的数据转换成整型会取整
byte x = 10;
byte y = 20;
byte z = x + y; //会报错,因为运算时已经变成int类型了
byte z = (byte) (x + y); //强制转换才能使用byte类型来接收
算术运算符
用来四则运算的符号,和小学学习的加减乘除无异:+、-、*、/、%(模)。
注意:“+”有3重意思,可以用于两个数的加,也可以用于表示正号,还可以用来连接字符串如:
// + 连接字符串
System.out.println("中国" + "加油"); //输出“中国加油”
前置++和后置++
这个要区分清楚,java面试经常会问这种问题。
前置++:++a表示先加1,再参与运算
后置++:a++表示先参与运算,运算完再加1
// 前后置++的区别
int a = 10;
System.out.println(a++); //a=10,先打印a,再加1
System.out.println(++a); //a=12,传下来时已经是11了,先加1,再打印
赋值运算符
赋值运算符包括:=、+=、-=、*=、/=、%=
重点说一下+=:
// +=赋值
int a = 10;
a += 2; //等价于a = a + 2;
byte b = 10;
b += 2; //不等价于b = b + 2;因为2是int型如果这样写会报错,结果已经是int型了,但是b += 2这样表达的时候底层已经完成了强制转换,结果还是byte型,所以一般自增都是使用+=,不建议使用b = b + 2
比较运算符
比较运算符:>、<、!=、>=、<=、==,比较运算符的结果是true 或者 false
三目运算符
重点,构成:数据类型 变量名 = boolean表达式 ?A :B;如果boolean表达式为true则结果为A,否则为B。
// 三目运算符————判断99的奇偶性
int i = 99;
String result;
result = i % 2 ==0 ? "偶数" : "奇数";
System.out.println("99是" + result);
逻辑运算符
常用逻辑运算符:&、|、!、&&、||(异或很少用,就不说了)。
// 逻辑运算符
int a = 10;
int b = 20;
int c = 30;
System.out.println(a > b & a > c); //结果false,同真则真,false + false = false
System.out.println(a < b | a > c); //结果true,一真则真,true + false = true
System.out.println(!a > b ); //结果true,取反,!false = true
//&与&&的区别
System.out.println(a > b & a / 0 == 0); //结果报错
System.out.println(a > b && a / 0 == 0); //结果false
//&与,无论&左边的表达式是否正确都要运行&右边的表达式。&&短路与,当&&左边的结果为false时不运行&&右边的表达式
//|与||区别
System.out.println(a < b | a / 0 == 0); //结果报错
System.out.println(a < b || a / 0 == 0); //结果false
//|或,无论|左边的表达式是否正确都要运行|右边的表达式。||短路或,当||左边的结果为true时不运行||右边的表达式
注:建议大家都使用短路与(&&)或短路或(||),因为程序会根据左边表达式判断是否运行右边表达式,能提高运行速度和性能。