主要记录一些与C++不太一样的语法部分
整型
与C++不同,Java中类型的大小与目标平台没有关系(32位或64位)。
类型 | 存储 | 取值范围 |
---|---|---|
int | 4字节 | -2 147 483 648~2 147 483 647(刚过20亿) |
short | 2字节 | -32 768~32 767 |
long | 8字节 | -9 223 372 036 854 775 808~9 223 372 036 854 775 807 |
byte | 1字节 | -128~127 |
浮点型
类型 | 存储 | 取值范围 |
---|---|---|
float | 4字节 | ±3.402 823 47E+38F(有效数字6~7位) |
double | 8字节 | ±1.797 693 134 862 315 70E+308(有效数字15位) |
特殊的数字
- 无穷大:Double.POSITIVE_INFINITY
- 无穷小:Double.NEGATIVE_INFINITY
- NaN:Double.NaN
- 检测NaN:Double.isNaN(x)
计算精度要求
如果不允许精度损失,需要使用BigDecimal类。
常量
- final:变量只能被赋值一次
- static final:某个常量可以在类内被一个或多个方法使用
- public static final:某个常量可以被其他类的方法使用
枚举类型
enum Size {SMALL, MEDIUM, LARGE, EXTRA_LARGE}
数学函数
- StrictMath类可确保在所有平台上得到相同的结果
- Math.multiplyExact(), Math.addExact()……在计算结果溢出时可以抛出异常,而非返回错误的值。
位运算符
- << :左移,用0填补低位
- >>:右移,用符号位填补高位
- >>>:算术右移,用0填补高位
字符串
- String类字符串不能修改,但可以共享
- 用equals()判断相等而不用==
- 空串不等于null串,需要分别判断
- charAt()返回下标位置的代码单元,但并不是所有的字符都只占据一个代码单元,因此用这个函数遍历字符串的每个字符存在一定的风险。
构建字符串
StringBuilder builder = new StringBuilder();
builder.append(char);
builder.append(string);
String completeString = builder.toString();
系统输入
Scanner in = new Scanner(System.in);
String s = in.nextLine();
String s = in.next();
int num = in.nextInt();
double dNum = in.nextDouble();
文件输入输出
Scanner in = new Scanner(Path.of("myfile.txt"), StandardCharsets.UTF_8);
PrintWriter out = new PrintWriter("myfile.txt", StandardCharsets.UTF_8);
大数
//BigDecimal同理
// 用long或String构造
BigInteger a = BigInteger.valueOf(100);
BigInteger b = BigInteger.valueOf("141111111111111111111111111111111111111111111");
//加,乘等用函数进行
BigInteger c = a.add(b);
BigInteger d = c. multiply(b.add(BigInteger.valueOf(2)));
数组
- 数组拷贝
int[] numbers = new int[100];
int[] target = Arrays.copyOf(numbers, numbers.length)//static xxx[] copyOf(xxx[], int end)