表达式自动提升类型
在程序中出现直接写出来的数字,如果是整数默认类型为int; 如果为小数默认类型为double.
一个表达式中包含多种数据类型时,结果的数据类型会自动提升,规则如下:
- byte, short, char 自动提升为int
- 整个表达式的类型提升到最高级的数据类型
float f1 = 3.14F; //直接写3.14这样的小数, 默认类型为double
int i1 = 2147483647; //直接写一个整数的数字, 默认类型为int
byte b1 = 3;
byte b2 = 2;
int sum1 = b1 + b2; //b1 和 b2 自动提升类型为int
short s1 = 3;
short s2 = 2;
int sum2 = s1 + s2; //s1, s2 自动提升类型为int
char c1 = '1';
char c2 = '2';
int sum3 = c1 + c2; //c1, c2 自动提升类型为int
System.out.println(sum3);
long l1 = 8;
//以为表达式中有一个long类型的加数, 所以整个表达式的结果提升为long
long sum4 = l1 + s1 + b1;
// 练习:
short s3 = 5;
// s3 = s3 - 2; //表达式中的2是int, 表达式的结果为int, 这个语句语法是错误的
字面量(直接量)
int m = 20; //20称为字面量
float f = 2.12F; //2.12F称为字面量
自动装箱和自动拆箱
每种基本类型都对应一种包装类型(类),基本类型于包装类型之间可以自动转换。
基本类型到包装类型为自动装箱
包装类型到基本类型为自动拆箱
基本类型 |
包装器类型 |
byte |
Byte |
short |
Short |
int |
Integer |
long |
Long |
float |
Float |
double |
Double |
char |
Character |
boolean |
Boolean |
int i= 10;
Integer integer = i; //基本类型直接赋值给包装类型,自动装箱
int i2 = integer; //包装类型直接赋值给基本类型,自动拆箱
//包装常用的方法
String str = "123";
Integer value = Integer.valueOf(str);//把字符串转化为整型
System.out.println(value);
int i1 = Integer.parseInt(str);//把字符串转化为int类型
System.out.println(i1);
Java数据类型
运算符
运算符包括以下几类:
- 算术运算符
- 赋值运算符
- 比较运算符
- 逻辑运算符
- 位运算符
- 三目运算符
算术运算符
double i1 = 2.32;
String str1 = "str"+"sdf";
System.out.println(i1+str1);
System.out.println(str1+i1); //字符串可以和基本数据类型拼接
int res1 = 8/3;//两整数相除为整数,结果为2;注0不能为被除数
System.out.println(res1);
double res2 = 8/2.5;
System.out.println(res2);
double res3 = 2.0/0;//浮点数可以除以0,结果为Infinity(无限大)
System.out.println(res3);
注:不能取0为被除数
int i4 = 3;//加与减法运算一样
System.out.println(i4++);//++再后先执行完单挑语句,然后再加一,结果为3
System.out.println(++i4);//++在前表示先加1,再执行运算。上条语句加1,所以结果为5
赋值运算符
- =赋值运算 将=右边的结果赋给左边的变脸,右边的值是字面量,表达式,变量,方法调用
int n = 5; //赋值字面量
n = 3 + 2; //赋值表达式
n = i4 - i3; //变量
Scanner scanner = new Scanner(System.in);
n = scanner.nextInt(); //赋值方法返回值
System.out.println(n = 4 +6);
=赋值用法
n +=2 //n = n + 2
n /=2 //n = n / 2
n %=2 // n = n % 2
比较运算符
用于判断两个操作数的大小是否属于判断条件,返回值是布尔型(true,false)
符号有:> < == >=(大于或等于) <=(小于或等于) !=(不等于)
逻辑运算符
- && 短路与
- & 与
- || 短路或
- | 或
- !非
- ^异或
与逻辑
int n=1;
System.out.println(false && (2 == ++n)); //两个操作数都为真,结果才为true
System.out.println(n); //短路与,当第一个操作数得到表达式的结果时,后面的(2 == ++n)不会被执行,所以n=1
int n=1;
System.out.println(false & (2 == ++n)); //两个操作数都为真,结果才为true
System.out.println(n); //逻辑与,不会被短路,后面的表达式也会被执行
或逻辑
当两个操作数有一个为true,则结果为true,短路或与或的关系和与逻辑一样。
逻辑非
System.out.println(!true);//false
System.out.println(!false);//true
异或
一真一假为真,两为真或两为假则为假。
System.out.println(true ^ true);//true
System.out.println(false ^ false);//false
位运算符
结果为5
注意符号
三目运算符
用于两分支的判断,等效于if else 语句
语法:条件表达式?为真值:为假值;
a=3 > 2 ? 100:1;
b=2 > 2 ? 100:1;
System.out.println(a);
System.out.println(b);
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int m = scanner.nextInt();
System.out.println(n > m ? n:m);
运算符的优先级
括号>单目运算符>算术运算>比较运算符>逻辑运算符>三目运算>赋值
条件判断语句
单分支条件判断
if(条件表达式){
条件为真执行语句
int n = scanner.nextInt();
int m = scanner.nextInt();
System.out.println(n > m ? n:m);
## 运算符的优先级
括号>单目运算符>算术运算>比较运算符>逻辑运算符>三目运算>赋值
[外链图片转存中...(img-I5TDtmCQ-1658652511049)]
# 条件判断语句
## 单分支条件判断
if(条件表达式){
条件为真执行语句
}