文章目录

  • 1.类型转换
  • 1.1 int和long/double相互赋值
  • 1.2 int和boolean相互赋值
  • 1.3 强制类型转换
  • 1.4 int和String之间的相互转换
  • 2.运算符
  • 2.1 算数运算符
  • 2.2 关系运算符
  • 2.3 逻辑运算符
  • 2.4 位运算符
  • 2.5 移位运算符
  • 2.6 条件运算符


1.类型转换

1.1 int和long/double相互赋值

int a = 10; 
long b = 20; 
a = b; // 编译出错, 提示可能会损失精度. 
b = a; // 编译通过. 

int a = 10; 
double b = 1.0; 
a = b; // 编译出错, 提示可能会损失精度. 
b = a; //编译通过

结论:和double表示的范围更大,可以将int赋值给long或者double,反之不行。这种转换是隐式转换

1.2 int和boolean相互赋值

int a = 10; 
boolean b = true; 
b = a; // 编译出错, 提示不兼容的类型
a = b; //编译出错,不兼容

结论:int和boolean是两种毫不相关的类型,不能相互赋值。

1.3 强制类型转换

int a = 0; 
double b = 10.5; 
a = (int)b; 

int a = 10; 
boolean b = false; 
b = (boolean)a; //编译出错,不兼容

byte a = 128; //报错
byte b = (byte)128; //通过

byte a = 10;
byte b = 20;
byte c = a + b; //报错
byte c = (byte)(a + b); //通过

结论

强制类型转换可以将范围大的变量值赋值给范围小的变量,但是可能会有精度丢失。在进行算术运算时,若类型范围小于int类型的范围会自动提升为int类型,想要赋值给原来的类型,需要用强制类型转换。

1.4 int和String之间的相互转换

int转String

int a = 10;
//方法一
String str1 = a + "";
//方法二
String str2 = String.valueif(a);

String转int

String str = "100";
int a = Integer.parseInt(str);

:若str的双引号内不是整型,则会报错。

2.运算符

2.1 算数运算符

  • 基本四则运算符 + - * / %

需要注意的有以下几点:

a) int/int结果还是int,若需要得到小数结果,则需要使用double。

int a = 1; 
int b = 2; 
System.out.println(a / b); 

// 结果为 0

b) 0不能为除数。

int a = 1; 
int b = 0; 
System.out.println(a / b) 
 
// 运行结果
Exception in thread "main" java.lang.ArithmeticException: / by zero
	at Test.main(Test.java:39)

c) %还可以对小数使用。

System.out.println(11.5 % 2.0); 

// 运行结果
1.5

2.2 关系运算符

关系与运算符主要有六个:

== != < > <= >=

只需要注意一点,关系运算符的表达式返回值都是boolean类型。

2.3 逻辑运算符

逻辑运算符主要有三个:

&& || !

逻辑与 &&:两个操作数都为 true, 结果为 true, 否则结果为 false。

逻辑或 ||:两个操作数都为 false, 结果为 false, 否则结果为 true。

逻辑非 !:操作数为 true, 结果为 false; 操作数为 false, 结果为 true(这是个单目运算符, 只有一个操作数)。

其中&&和||符合短路求值的规则:

System.out.println(10 > 20 && 10 / 0 == 0); // 打印 false 
System.out.println(10 < 20 || 10 / 0 == 0); // 打印 true

上面说到,若将0作为除数则会报错,为什么在这里不会报错呢?说明程序根本就没有运行到10 / 0这一步,这正是因为短路的问题,在&&中,当左侧的运算结果为false时,就不会继续运算,直接返回false。在||中,当左侧运算结果为true时,不会继续运算,直接返回true。

2.4 位运算符

位运算符主要有四个:

& | ~ ^

按位与 &:如果两个二进制位都是 1, 则结果为 1, 否则结果为 0。

按位或 |:如果两个二进制位都是 0, 则结果为 0, 否则结果为 1。

按位取反 ~: 如果该位为 0 则转为 1, 如果该位为 1 则转为 0。

按位异或 ^: 如果两个数字的二进制位相同, 则结果为 0, 相异则结果为 1。

2.5 移位运算符

移位运算符有三个:

<< >> >>>

左移 <<: 最左侧位不要了, 最右侧补 0。

右移 >>: 最右侧位不要了, 最左侧补符号位 比特科技 (正数补0, 负数补1)。

无符号右移 >>>: 最右侧位不要了, 最左侧补 0。

2.6 条件运算符

条件运算符只有一个:

表达式1 ? 表达式2 : 表达式3

// 求两个整数的最大值
int a = 10; 
int b = 20; 
int max = a > b ? a : b;

也是Java中唯一的一个三目运算符。