数据类型
单精度浮点型:float4个字节、双精度浮点型:double8个字节
字符型:char、一个字符等于两个字节
布尔类型:boolean、ture&&false
基本数据类型之间的规则
自动类型转换:自动提升为容量大的类型
byte、char、short --> shot --> int --> long -->float -->double
byte、char、short变量做运算的时候结果为int类型
byte a = 2;
int b = 129;
int c = a + b;
强制类型转换:手动转换为容量小的类型(可能会造成精度的损失)
double a = 20.12;
int b = (int)a;
sout("20");
编码情况:整型常量默认为int类型 ,浮点型常量默认为double类型
byte a = 2;
byte b = (byte) (a + 1);
String类型:属于引用数据类型、可以和8种数据类型做运算、只能用作连接运算、运算类型结果是String类型
运算符
算数运算符:
运算符号 | 运算 | 例子 | 结果 |
+ | 正号 | +1 | 1 |
- | 负号 | b=1;-b | -1 |
+ | 加 | 2+2 | 4 |
- | 减 | 1-1 | 0 |
* | 乘 | 2*2 | 4 |
/ | 除 | 2/2 | 1 |
% | 取模(取余) | 5%2 | 1 |
++ ++ | 自增:先运算后取值 先取值后运算 | a=1;b=++a a=1;b=a++ | a=2;b=2 a=1;b=2 |
-- -- | 自减:先运算后取值 先取值后运损 | a=1;b=--a a=1;b=a-- | a=0;b=0 a=1;b=0 |
+ | 字符串连接 | "hello"+" "+"world" | hello world |
int num1 = 2;
int num2 = 2;
int result = num1+num2;
int result2 = num1/num2;
输出result=4 result2=1
扩展赋值运算符号:不会改变本身的数据类型
运算符号 | 例子 | 结果 |
+= | int a = 1; a += 1; | a=2; |
-= | int a = 1; a -= 1; | a=0; |
*= | int a = 4; a *= 4; | a=16; |
/= | int a = 12; a /= 4; | a=3; |
%= | int a = 12; a %= 5; | a=2; |
比较运算符:
运算符 | 运算 | 范例 | 结果 |
== | 相等于 | 1==2 | false |
!= | 不等于 | 1!=2 | true |
< | 小于 | 1<2 | true |
> | 大于 | 1>2 | false |
<= | 小于等于 | 1<=2 | false |
>= | 大于等于 | 1>=2 | false |
instanceof | 检查是否是类的对象 | "hello" instanceof String | false |
int a = 1;
int b = 2;
System.out.println(a == b);//false
比较运算结果都是布尔类型
特殊情况:比较两个对象的时候;引用类型比较的是他们的地址值
Account account = new Account(2);
Account account2 = new Account(2);
System.out.println(account==account2);
sout(false);
逻辑运算符:
&-逻辑与、&&-短路与、|-逻辑或、||-短路或、!-逻辑非、∧逻辑异或
a | b | !a | a∧b |
true | true | false | false |
false | false | true | true |
位运算符:操作的是整型的数据
运算符 | 运算 | 例子 |
<< | 左移 | 3 << 2 = 12 --> 3*2*2=12 |
>> | 右移 | 3 >> 1 = --> 3/2=1 |
>>> | 无符号右移 | 3 >>> 1 = 1 --> 3/2=1 |
& | 与运算 | 6 & 3 = 2 |
| | 或运算 | 6 | 3 = 7 |
∧ | 异或运算 | 6 ∧ 3 = 5 |
~ | 取反运算 | ~6 = -7 |
位运算符号:在一定范围内向左(右)移动一位乘以2(除以2)
int a = 12;
System.out.println("a << 2 =" + a << 2);
System.out.println("a << 2 =" + a >> 2);
sout(48) //12*2*2
sout(3) //12/2/2
交换两个数的位置:
int num = 10;
int num2 = 20;
int temp = num;
num = num2;
num2 = temp;
System.out.println(num+";"+num2);
sout(num=20;
num2=10
)
高效实现2 * 8;使用位运算符;位运算符直接对数据进行操作,相对于各种数据先转换为二进制数据在进行计算要高效
int a = 2 << 2;
int a = 8 << 1;
sout(16);
三元运算符
int m = 1;
int n = 2;
int max = (m>n)?m:n;
sout(2);
String maxStr = (m>n)?"m大":"n大";
sout(n大);
运算符的优先级 -->略
程序流程控制
顺序结构 -->略
分支结构:
if()else{}
int a = 10;
int b = 20;
if(a>b){
System.sout.println(10);
}else{
System.sout.println(20);
}
sout(20);
if(){}else{}if(){}else{}
int a = 1;
int b = 2;
int c = 3;
if(a>b){
System.out.println("1");
}else if(b>c){
System.out.println("2");
}else{
System.out.println("3");
}
sout(3);
循环结构:
键盘获取不同变量类型
java8官方文档地址https://docs.oracle.com/javase/8/docs/api/index.html
CTRL + F 弹出搜索框,输入Scanner找到键盘获取数据的使用文档,根据选择设置。
使用Scanner类,使用到的包java.uitl.Scanner、实例化Scanner、选择输入int类型的数据使用
.nextInt();
使用Scanner类,使用到的包java.uitl.Scanner、实例化Scanner、选择输入String类型的数据使用
.next();