前言
由于部分知识在C语言学过,这里只选了自己不是很熟的进行学习。
这里选的几张CSDN图片均为自己账号的图片0.0
类型转换
自动类型转换
是什么:类型范围小的变量,可直接赋值给类型范围大的变量
package Type;
public class typedemo {
public static void main(String[] args) {
//自动转换类型
byte a = 6;
int b = a;//此处发生了自动类型准换
System.out.println(a);
System.out.println(b);
}
}
从底层原理来看:a占8位,为0000110,而b中有32位,完全可以放下a中的8位
自动类型转换的其他形式:
表达式的自动类型转换
在表达式中,小范围类型的变量会自动转换成当前较大范围的类型再计算
eg byte、short、char——>int——>long——>float——>double
package Type;
public class typedemo {
public static void main(String[] args) {
//表达式的自动转换类型
byte a = 8;
int b = 10;
double c = 15.0;
double d;
d=a+b+c;
System.out.println(d);
}
}
此处的结果为33.0
而如果此处用的不是double来接收,,用的是int,则会出现如下的报错
注意事项:表达式的最终结果类型是由表达式的最高类型决定
在表达式中,byte、short、char是直接转换为int参与运算的
强制类型转换
是什么:就是强制将一种数据类型转换为另一种数据类型,如图
从底层原理来看:a虽然占32位,但是前24位都是0,后8位表示数据,完全可以放进byte的8位中不出现问题,但这个只能针对数据小的情况,假如a很大,强制转换位byte就会发生问题,会丢失后8位以外的数。
还有一种会丢失数据的情况,将小数的double类型转换为整数的int类型,会只保留整数。
运算符
+符号作连接符
package OperateDemo;
public class Demo1 {
public static void main(String[] args) {
int a = 5;
System.out.println("abc" + 'a');
System.out.println("abc" + a);
System.out.println(5 + a);
System.out.println("abc" + 5 + 'a');
System.out.println(a + "" + 'a');
System.out.println(a + 'a' + "abc");
System.out.println("abc" + a + 'a');
System.out.println("abc" + (a + 'a'));
}
}
+号除了能在加减乘除中起到作用,在连接中也有作用,做连接符的时候,遵循一个口诀:能算就算,不能算就在一起。
例如上面的代码中,第6行代码中字符串abc无法与字符a运算,所以说就连接在一起,结果为abca 再比如说第8行,因为a=5,是数字,与5能运算,故结果为10。
第11行中存在数字,字符,字符串,遵循从左往右的计算方法,字符a在ASCII码中表示为97,97可以与5计算,得到102,但是102不能与abc计算,所以最终答案为102abc。
自增、自减运算符
package OperateDemo;
public class Demo1 {
public static void main(String[] args) {
int a = 5;
int b = 9;
a++;
System.out.println(a);
++a;
System.out.println(a);
b--;
System.out.println(b);
--b;
System.out.println(b);
}
}
从结果上看,++、–单独使用时,放在前后没有影响,但是在表达式中使用,就会有所区别。
package OperateDemo;
public class Demo1 {
public static void main(String[] args) {
int a = 5;
int sum1 = 0,sum2 = 0;
sum1=a++;
System.out.println(sum1);
a--;
sum2=++a;
System.out.println(sum2);
}
}
sum1=5 sum2=6<br />从结果来看,++放在变量前面,先+1在运算;放在变量后面,先运算再+1(--同理)
package OperateDemo;
public class Demo1 {
public static void main(String[] args) {
int c = 3;
int d = 5;
int sum = c++ + ++c - --d + d-- - c-- + ++d + 2;
System.out.println(sum);
System.out.println(c);
System.out.println(d);
}
}
分析:
c 3 4 5 空 空 4 空
d 5 空 空 4 3 空 4
sum 空 3 +5 -4 +4 -5 +4 +2 =9
只要一步步来,就基本不会出错~~(maybe)~~
逻辑运算符
符号 | 名字 | 说明 |
---|---|---|
& | 逻辑与 | 都对才对 |
| | 逻辑或 | 有一个对即为对 |
! | 逻辑非 | 你真我假,你假我真 |
^ | 逻辑异或 | 两个条件都对或都错则结果是错 |
短路逻辑运算符
&& | 短路与 | 判断结果与&一样,过程是左边为false,右边不执行 |
---|---|---|
|| | 短路或 | 判断结果与|一样,过程是左边为true,右边不执行 |
package OperateDemo;
public class Demo1 {
public static void main(String[] args) {
int c = 3;
int d = 5;
System.out.println(c>5&&++d>10);
System.out.println(c>5&++d>10);
System.out.println(d);
System.out.println(c<5||++d>10);
System.out.println(c<5|++d>10);
System.out.println(d);
}
}
结果为false false 6 true true 7
从结果上看,&、|是无论对错,都执行;&&、||是先执行左边的,判断对错,再根据对错判断是否执行右边。