- System.out打印一个二维数组
- 数组在函数参数传递中,在函数内部被改变,
- 数组如何在声明的时候直接赋初值?
- Integer.parseInt和Integer.valueOf()
- ThreadLocal在线程池中使用,使用完毕必须清理线程的ThreadLocal,避免污染下一个复用的线程操作
Objects.equals()传入两个null,返回true。其函数定义如下:
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}
Integer转换成String #
在Java中,将整数(int)转换为字符串(String)有几种常见方法,以下是详细的说明和示例:
1. 使用 String.valueOf(int)
#
推荐方式,简洁且可读性高。
int num = 123;
String str = String.valueOf(num);
System.out.println(str); // 输出 "123"
2. 使用 Integer.toString(int)
#
与 String.valueOf() 类似,性能几乎相同。
int num = 456;
String str = Integer.toString(num);
System.out.println(str); // 输出 "456"
3. 通过字符串拼接(隐式转换) #
直接与空字符串拼接,Java会自动调用 String.valueOf()。
int num = 789;
String str = "" + num;
System.out.println(str); // 输出 "789"
注意:虽然简单,但会生成额外的临时字符串,性能稍差(在循环中不推荐)。
4. 使用 String.format()
#
适合需要格式化输出的场景(如补零、对齐等)。
int num = 42;
String str = String.format("%d", num); // 格式化为十进制
System.out.println(str); // 输出 "42"
5. 使用 StringBuilder 或 StringBuffer
#
适用于需要频繁拼接的场景(实际转换整数时较少用)。
int num = 101;
String str = new StringBuilder().append(num).toString();
System.out.println(str); // 输出 "101"
注意事项: #
- 性能:
String.valueOf()和Integer.toString()是最优选择,底层实现相同。 - 进制转换:如果需要转为其他进制(如二进制、十六进制),可以用
Integer.toBinaryString()或Integer.toHexString()。int num = 255; String binary = Integer.toBinaryString(num); // "11111111" String hex = Integer.toHexString(num); // "ff"
总结: #
- 推荐:
String.valueOf(int)或Integer.toString(int)。 - 避免:在循环中使用
"" + int(性能较差)。 - 特殊需求:格式化或进制转换时选择对应方法。
String转换成Integer #
在Java中,将字符串(String)或字符数组(char[])转换为整数(int)有几种常用方法,具体取决于输入格式和需求。以下是详细说明和示例:
1. 将 String 转为 int
#
方法 1:Integer.parseInt(String)(推荐)
#
适用于标准十进制字符串,如果字符串格式非法(如包含非数字字符),会抛出 NumberFormatException。
String str = "123";
int num = Integer.parseInt(str);
System.out.println(num); // 输出 123
其会自动忽略前导零
Integer.parseInt(new String("000001"))
// $1 ==> 1
方法 2:Integer.valueOf(String)
#
与 parseInt 类似,但返回 Integer 对象(自动拆箱为 int)。
String str = "456";
int num = Integer.valueOf(str); // 自动拆箱
System.out.println(num); // 输出 456
方法 3:处理进制转换 #
如果字符串是二进制、八进制或十六进制,可以指定进制:
String binaryStr = "1010"; // 二进制
int binaryNum = Integer.parseInt(binaryStr, 2); // 2 表示二进制
System.out.println(binaryNum); // 输出 10
String hexStr = "FF"; // 十六进制
int hexNum = Integer.parseInt(hexStr, 16); // 16 表示十六进制
System.out.println(hexNum); // 输出 255
方法 4:处理可能的非法输入 #
使用 try-catch 避免 NumberFormatException:
String str = "123abc";
try {
int num = Integer.parseInt(str);
System.out.println(num);
} catch (NumberFormatException e) {
System.err.println("非法数字格式: " + str);
}
2. 将 char[] 转为 int
#
方法 1:先转为 String,再用 parseInt
#
char[] charArray = {'1', '2', '3'};
String str = new String(charArray);
int num = Integer.parseInt(str);
System.out.println(num); // 输出 123
方法 2:逐字符计算(适用于单个数字字符) #
如果 char[] 只包含一个数字字符(如 '5'),可以直接计算:
char ch = '7';
int num = ch - '0'; // ASCII 计算:'7' - '0' = 7
System.out.println(num); // 输出 7
如果 char[] 包含多位数字,可以遍历计算:
char[] digits = {'1', '2', '3'};
int num = 0;
for (char c : digits) {
num = num * 10 + (c - '0');
}
System.out.println(num); // 输出 123
3. 特殊情况处理 #
(1)处理前导/后导空格 #
使用 trim() 移除空格:
String str = " 123 ";
int num = Integer.parseInt(str.trim()); // 自动去掉空格
System.out.println(num); // 输出 123
(2)处理空字符串或 null
#
String str = "";
try {
int num = Integer.parseInt(str);
} catch (NumberFormatException e) {
System.err.println("输入不能为空");
}
(3)处理大数字(超出 int 范围)
#
如果字符串表示的数字超过 Integer.MAX_VALUE(2147483647),会抛出异常。可以使用 Long.parseLong():
String bigNumStr = "2147483648"; // 比 Integer.MAX_VALUE 大 1
try {
long bigNum = Long.parseLong(bigNumStr);
System.out.println(bigNum); // 2147483648
} catch (NumberFormatException e) {
System.err.println("数字超出范围");
}
总结 #
| 场景 | 方法 | 示例 |
|---|---|---|
String → int | Integer.parseInt(str) | int num = Integer.parseInt("123"); |
String(二进制/十六进制)→ int | Integer.parseInt(str, radix) | int hex = Integer.parseInt("FF", 16); |
char[] → int | 先转 String 再 parseInt | int num = Integer.parseInt(new String(charArray)); |
单个 char → int | ASCII 计算 (ch - '0') | int num = '7' - '0'; |
| 处理非法输入 | try-catch | try { Integer.parseInt(str); } catch (...) { ... } |
推荐优先使用 Integer.parseInt(),因为它直接返回 int,而 Integer.valueOf() 返回 Integer 对象(可能涉及自动拆箱)。