Java数据类型

基本数据类型

  • 数值:byte1字节 short1字节 int4字节 long8字节
  • 浮点:float4字节 double8字节
  • 字符:char2字节,存放单个字符a
  • 布尔:boolean1字节,true/false,不能用0/1代替

自动类型转换

  • 精度小的类型自动转换为精度大的类型
  • 多种数据混合计算:所有数据转换成容量最大的数据类型,再计算
  • bytechar之间不会自动转换,但可以计算,计算时转换为int类型
  • boolean不参与转换
1
2
3
4
5
6
7
8
9
10
11
n1 = 10;
float d1 = n1 + 1.1; // ❌ n1 + 1.1为double类型,赋给d1产生精度损失
double d1 = n1 + 1.1; // ✔
float d1 = n1 + 1.1F; // ✔

int n2 = 1.1; // ❌
double n3 = n1; // ✔ 自动转换

byte b1 = 1;
byte b2 = 2;
byte b3 = b1 + b2; // ❌ b1 + b2会转换成int类型,不能再赋给b3

强制转换

1
2
3
byte b=10;
b=b+11; // ❌
b=(byte)(b+11); // ✔强制转换

引用数据类型

  • 接口
  • 数组
1
System.out.println(100+3+"hello")  // 输出:103hello

Java运算符

算数运算符

1
2
3
4
5
6
7
// -10 % 3 = -1
// 10 % -3 = 1
// -10 % -3 = -1
int i = 10;
int k = i++; // 先赋值后自增
int j = ++i; // 先自增后赋值
System.out.println("k="+ k + "j=" j); // 10 11

逻辑运算符

  • &&与&的区别
    • &&短路与:第一个条件不成立,不再判断第二个,效率高
    • &逻辑与:第一个条件不成立,仍需判断第二个,效率低
1
2
3
4
5
6
7
8
9
int a=1;
int b=2;
if(a<1 && ++b<100)
System.out.println("ok100");
System.out.println("a="+ a + "b="+ b); // 1 2

if(a<1 & ++b<100)
System.out.println("ok200");
System.out.println("a="+ a + "b="+ b); // 1 3
  • a^b 逻辑异或:ab不同为true,相同为false

三元运算符

  • 条件 ? 表达式1 : 表达式2 :条件真->1,条件假->2

数组使用方式

  1. 动态初始化
1
2
3
4
5
6
7
8
9
10
11
import java.util.Scanner;
public class Array{
public static void main(String[] args){
int[] a = new int[5] // 创建一个大小为5个int的数组a
// 循环输入
Scanner myScanner = new Scanner(System.in);
for(int i = 0; i < a.length; i++){
a[i] = myScanner.nextInt();
}
}
}