Day2

87 阅读2分钟

隐式转换

将数据类型取值范围小的数据,给取值范围大的类型赋值时,会自动转换可以直接赋值。

例如

int a = 10;
double b = 10.0;

double b = a + b;
//在运算的时候会自动把变量a转为double数据再进行计算。

image.png

强制转换

byte a = 10;
byte b = 10;

byte c = a + b; //在运算a+b时, a和b都会自动转为int类型,由于c是byte类型,所以没有办法直接接收。

byte c =(byte)(a+b); //需要强制类型转换。
//或者,直接用int类型的变量去接收。
int c = a + b;

byte\char\short等数据间的运算,会自动把类型提升为int类型运算。

字符+操作

char类型运算是根据ASCII码表根据对应字符转为底层字节再运算

char a = 'a';
int b = 1;

system.out.println(a + b);  //字符a对应的底层字节是97,所以会输出98。

'a'字符的底层字节是97 'A'字符的底层字节是65 'O'字符的底层自己是48

字符串+操作

//字符串可以跟 +号,跟[任意数据类型]拼接

int a = 1;
int b = 2;

system.out.println(a + "分"); //自动把a转为字符串,输出1分。
system.out.println(a + b + "分");//先执行a+b得到3,再将3转为字符串,输出3分。
system.out.println("分" + a + b);// a会被转换成字符串先跟"分"拼接在一起变为"分1",再对b做同样操作,输出分12。

数字拆分公式

个位 数值%10

十位 数值/10%10

百位 数值/10/10%

千位 数值/10/10/10%

........

原理,例如求123的十位,123除以10后会因为损失精度得到12,12模10后余2,就可以得到十位的2。

自增自减运算符

建议单独使用,常量不允许使用自增自减。

int a = 2;

system.out.println(a++);  //先输出a,输出完后自增变3
system.out.println(a);    //输出3
system.out.println(++a);  //先自增,然后再输出4
system.out.println(a);    //输出4,减法同理

基本赋值符

image.png


int a = 1;
int b = 2;

a += b  // a += b等同于 a = a + b

system.out.println(a);  //输出3

byte c = 1;
byte d = 2;


c += d; // c += d 等同于 c = (byte)(c + d),会自动强制转换。扩展赋值运算符底层会自带强转功能。

system.out.println(c);  //输出3

逻辑运算符

image.png

//与
System.out.println(true & true);  //输出true
System.out.println(true & false); //输出false
System.out.println(false & false);
 //或//
System.out.println(true | true); //输出true
System.out.println(true | false); //输出true
System.out.println(false | false); //输出false
//非
 System.out.println(!true); //输出false
System.out.println(!false);//输出true
 //异或
System.out.println(true ^ true); //输出false
System.out.println(true ^ false); //输出true
System.out.println(false ^ false); //输出false

短路逻辑运算符

image.png

短路效果,即判断第一个条件,若不通过,则不执行后续的代码

int  a = 1
int  b = 2;

System.out.println(++a > 2 && b-- < 3 ); //a自增 2不大于2,短路后b没有自减
System.out.println(a); //输出2
System.out.println(b); //输出2