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 熟悉,可以类比如下:

JavaPython
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
场景 日常调试/打印变量值 精确控制字节输出(如生成二进制数据)

 

posted @ 2025-07-19 23:38  AlphaGeek  阅读(13)  评论(0)    收藏  举报