Java的的println和write方法有何区别?该如何理解这种差异
注意:write() 方法不经常使用,因为 print() 和 println() 方法用起来更为方便。
✅ 1. System.out.println(b)
含义:
-
是 Java 提供的一个 标准输出方法,用于打印一个变量并 自动换行。
-
如果你写的是
println(int b),会把b当作**整数(十进制)**输出。
示例:
int b = 'A'; // 'A' 的 ASCII 码是 65 System.out.println(b);
输出:
65
✅ 2. System.out.write(b)
含义:
-
是
OutputStream的底层方法,System.out实际上是一个PrintStream,继承自OutputStream。 -
write(int b)方法会将参数b的 低8位(字节)当作字符输出。
示例:
System.out.write(b); // 输出的是字符 'A' System.out.write('\n'); // 手动加一个换行
输出:
A
✅ 总结对比表:
| 方法 | 输出含义 | 自动换行 | 输出的是? | 是否格式化 |
|---|---|---|---|---|
System.out.println(b) |
输出 b 的 十进制数值 | ✅ 是 | 整数 → 字符串 | ✅ 是 |
System.out.write(b) |
输出 b 的 字符(底层字节) | ❌ 否 | 字节 → 字符 | ❌ 否 |
✅ 扩展:如果你要输出字符 'A' 而不是数字 65?
你可以直接:
System.out.println((char)b); // 输出 A
✅ 场景适用
| 场景 | 推荐使用 |
|---|---|
| 输出调试信息、日志 | println() |
| 写入原始二进制数据、文件流 | write() |
如果你对 Python 熟悉,可以类比如下:
| Java | Python |
|---|---|
System.out.println(65) |
print(65) |
System.out.write(65) |
sys.stdout.write(chr(65)) |
追问:怎么理解这句话:
write(int b) 方法会将参数 b 的 低8位(字节)当作字符输出。
而且我从Intellij输出的结果来看,这两者都是打印出来对应的内容,我还没有理解两者的区别到底在哪?
你的疑问非常合理,特别是在 IntelliJ 这样的现代 IDE 里,这两个方法的输出结果在大多数简单场景下看起来是一样的,因为:
System.out.println('A')和System.out.write('A')都会在控制台打印出A—— 但它们背后的处理机制完全不同。
我们现在来详细拆解这句关键话:
🔍 “write(int b) 方法会将参数 b 的低8位(字节)当作字符输出” 是什么意思?
✅ 背景知识
在 Java 中,System.out 是一个 PrintStream,它继承自 OutputStream,底层操作是 字节流:
public class PrintStream extends FilterOutputStream implements Appendable, Closeable
它提供的 write(int b) 方法:
public void write(int b) { // 实际上是将 b 的低8位(即一个字节)写到输出流 }
🔧 示例说明
int b = 'A'; // 'A' 是字符,对应 ASCII 是 65,二进制是 01000001 System.out.println(b); // 输出:65 System.out.write(b); // 输出:A
🧠 为什么不同?
| 方法 | 内部原理 | 实际输出 |
|---|---|---|
println(int b) |
把 int 类型的变量当作 数字 打印 |
65 |
write(int b) |
把 int 类型的变量当作 字节流中的字符 输出 |
A(65 = 'A') |
write方法会丢弃int b的高 24 位,只取 低8位(即一个字节),然后按字符方式写出。
🧪 进一步例子来直观比较
我们换一个数字:
int b = 169; // 二进制是 10101001 System.out.println(b); // 打印十进制:169 System.out.write(b); // 尝试把 169 作为字符输出(ISO-8859-1 编码中) System.out.write('\n');
输出:
在支持 ISO-8859-1 的控制台中:
169
©
✅ 最终结论(关键理解)
| 对比点 | println(int) | write(int) |
|---|---|---|
| 输出目标 | 把 int 当作数字打印 |
把 int 的低8位当作字符打印(字节输出) |
| 内部机制 | 高级封装:格式化打印、换行等 | 底层操作:写入输出流 |
| 是否自动换行 | 是 | 否,需要手动写 \n |
| 场景 | 日常调试/打印变量值 | 精确控制字节输出(如生成二进制数据) |

浙公网安备 33010602011771号