基本数据类型转换
- boolean类型不可以转换为其他的数据类型
- 整型,字符型,浮点型的数据在混合运算中相互转换,转换时遵循以下原则:
- 容量小的类型自动转换为容量大的数据类型 ;数据类型按容量大小排序为:
byte,short,char->int->long->float->double
byte,short,char之间不会相互转换,他们三者在计算时首先会转换为int类型 - 容量大的数据类型转换为容量小的数据类型时,要加上强制转换符,但可能造成精度降低或溢出;使用时要格外注意。
- 有多种类型的数据混合运算时,系统首先自动的将所有数据转换成容量最大的那一种数据类型,然后再进行计算
- 实数常量(如:1.2)默认为double
- 整数常量(如: 123)默认为int
int i1 = 123;
double d1 = i1*0.12;
float f1 = (float)(d1); // 需要加强制转换符
System.out.println(f1);
byte b1 = 67; byte b2 = 89; // byte的最大范围是127,1个字节
byte b3 = (byte)(b1+b2); // 系统将转换为int型运算,需要强制转换符
System.out.println(b3);
char c1 = '人'; char c2 = '中';
char c3 = (char)(c1+c2);
System.out.println(c3);
double d2 = 1e200;
float f2 = (float)d2; // 会产生溢出 Infinity
System.out.println(f2);
float f3 = 1.23f; // 必须加f
long l1 = 123;
long l2 = 30000000000l; // 必须加l
float f = l1+l2+f3; // 系统将转换为float型计算
long l = (long)f; // 强制转换会舍去小数部分(不是四舍五入)
int i = 300, j;
j =100; // j 为int类型
System.out.println(j);
float f1 = 123;
System.out.println(f1);
i = i/1000; // i为int类型,1000为int类型,// 0
System.out.println(i);
格式
格式应注意的问题:
- 大括号对齐
- 遇到{缩进,Tab/Shift+Tab
- 程序块之间加空行
- 并排语句之间加空格
- 运算符两侧加空格
1.有特定条件(for循环里的除外) - {前面有空格
- 成对编程
程序格式的要求
- 要让别人看得清楚
- 要让别人看得舒服
自加和自减运算符
示例
public class HelloWorld {
public static void main(String[] addd) {
int i1 = 10 , i2 = 20;
int i = (i2++);
System.out.print("i=" + i);
System.out.println(" i2=" + i2);
i = (++i2);
System.out.print("i=" + i);
System.out.println(" i2=" + i2);
i = (--i1);
System.out.print("i=" + i);
System.out.println(" i1=" + i1);
i = (i1--);
System.out.print("i=" + i);
System.out.println(" i =" + i1);
}
}

结果.png
注意: ++(–)
- ++(–)
- 在前时先运算再取值
- 在后时先取值再运算
逻辑运算符
逻辑运算符
!——逻辑非
& ——逻辑与
| ——逻辑或
^ ——逻辑异或(两个不同即为true)
&& ——短路与
|| ——短路或
a | b | !a | a&b | alb | a^b | a&&b | allb |
---|---|---|---|---|---|---|---|
true | true | false | true | true | false | true | true |
true | false | false | false | true | true | false | true |
false | true | true | false | true | true | false | true |
false | false | true | false | false | false | false | false |
赋值运算符与扩展运算符
- 赋值运算符(=)
当“=”两侧数据类型不一致时,可以适用默认类型转换或使用强制类型转换原则进行处理
long l = 100; int i = (int) l; - 注意: 可以将整型常量直接赋值给byte,short,char等类型变量,而不需要进行强制类型转换,只要不超出其表数范围
byte b = 12; char c = 100;
(错误示例 X) byte bb = 256; (bb 最大为127) X short s = -32769; (short(2字节)最小值为-32768)
运算符 | 用法举例 | 等效的表达式 |
---|---|---|
+= | a += b | a = a + b |
-= | a -= b | a = a – b |
*= | a *= b | a = a * b |
/= | a /= b | a = a / b |
%= | a %= b | a = a % b |
-
“+”除用于算术加法运算外,还用于对字符串进行连接操作
int id = 800+80;
String s = “hello”+”world”; -
“+”运算符两侧的操作数中只要有一个是字符串(String)类型,系统会自动将另一个操作数转换为字符串然后再进行来连接。
int c = 12;
System.out.println(“c=” + c); -
当进行打印时,无论任何类型都自动转换为字符串进行打印
System.out.println(c);
表达式
- 表达式是符合一定语法规则的运算符和操作数的序列
a
5.0+a
(a-b)*c-4 - 表达式的类型和值
- 对表达式中操作数进行运算得到的结果称为表达式的值
- 表达式值的数据类型即为表达式的类型
- 表达式的运算顺序
- 应按照运算符的优先级从高到低的顺序进行
- 优先级相同的运算符按照事先约定的结合方向进行
三目条件运算符
- 三目条件运算符,语法格式:
x ? y : z - 其中x为boolean类型表达式,先计算x的值,若为true,则整个三目运算结果为表达式y的值,否则整个运算结果为表达式z的值。
- 举例:
int score = 80; int x = -100;
String type = score
int flag = x > 0 ? 1 : (x == 0 ? 0 : -1); // 从里面往外面算
System.out.println(” type= ” + type);
System.out.println(” flag= ” + flag);
type = 及格
flag = -1