【发布时间】:2013-08-20 14:48:22
【问题描述】:
在我的 servlet 中,我同时提供了 out.print 和 out.write。但两者都在浏览器中打印。
这两者之间的确切区别是什么以及何时使用out.print和out.write?
【问题讨论】:
-
out的类型是什么?文档怎么说?
标签: java servlets printwriter
在我的 servlet 中,我同时提供了 out.print 和 out.write。但两者都在浏览器中打印。
这两者之间的确切区别是什么以及何时使用out.print和out.write?
【问题讨论】:
out 的类型是什么?文档怎么说?
标签: java servlets printwriter
基本的区别是out.write()如果你传递一个空值就会爆炸:
String s = null;
out.print(s); // outputs the text "null"
out.write(s); // NullPointerException
【讨论】:
public void write(String s)
写一个字符串。此方法不能从 Writer 类继承 因为它必须抑制 I/O 异常。
print 方法具有更高的抽象级别。
public void print(String s)
打印一个字符串。如果参数为空,则字符串“null”为 打印。否则,字符串的字符将转换为字节 根据平台的默认字符编码,而这些 字节完全按照 write(int) 方法的方式写入。
希望这会有所帮助。
【讨论】:
有三个主要区别:
1) 如果您尝试使用 out.write() 打印字符串的空值,则会抛出 NullPointerException 而 out.print() 将简单地将 NULL 打印为字符串。
String name = null;
out.write(name); // NullPointerException
out.print(name); // 'Null' as text will be printed
2) out.print() 可以打印布尔值,但 out.write() 不能。
boolean b = true;
out.write(b); // Compilation error
out.print(b); // 'true' will be printed
3) 如果你使用out.write(),你根本无法放置算术运算代码,out.print() 提供支持。
out.write(10+20); // No output will be displayed.
out.print(10+20); // Output '30' will be displayed.
【讨论】:
在您的情况下,out 变量很可能是指 PrintWriter
对比一下write的描述就...
public void write(String s)写一个字符串。此方法不能从 Writer 类继承,因为它必须抑制 I/O 异常。
... 带有 println 的描述 ...
public void println(String x)打印一个字符串,然后终止该行。这个方法的行为就好像它调用了 print(String) 然后 println()。
...并打印...
public void print(String s)打印一个字符串。如果参数为空,则打印字符串“null”。否则,将字符串中的字符按照平台默认的字符编码转换为字节,这些字节完全按照write(int)方法的方式写入。
总而言之,我会说打印方法在更高的抽象级别上工作,并且是我在编写 servlet 时更喜欢使用的方法。
【讨论】:
PrintWriter 的实现比 javadoc 更好地传达了差异
public void print(String s) {
if (s == null) {
s = "null";
}
write(s);
}
【讨论】:
首先你不能在 servlet 中使用javax.servlet.jsp.JspWriter out。它必须在.jsp 文件中使用,因为out 是.jsp 文件的_jspService(...) 方法中的方法局部变量。
使用
out.print()和out.write()的目的没有区别。 两者都用于将给定对象的String版本写入JspWriter 的缓冲区。
但是,JspWriter.print() 能够接受比 Writer.write() 更多类型的参数。
JspWriter.print()
Writer.write()
【讨论】:
write() 方法只将字符写入流(或控制台)但不打印,而 print() 方法将其写入并打印到流(或控制台)。
System.out.write(97);
System.out.print('j');
第一条语句在控制台上写入字符 97 即“a”但不打印,而第二条语句打印已经写入流中的“a”和在 print() 方法中传递的“j”。
【讨论】:
我就是这样认识的:
out.println()是javax.servlet.jsp.JspWriter的方法
out.write()是java.io.Writer的方法
【讨论】:
还有一个区别是 out.write(-) 方法只是像文件一样将数据或对象写入浏览器。你不能写任何像 out.write(10*20); 这样的语句,但是我们用 out.print(10*20);
来做到这一点【讨论】: