1. 程式人生 > >JSP頁面中內建物件out的列印方法out.print與out.write的區別

JSP頁面中內建物件out的列印方法out.print與out.write的區別

一丶簡介
在JSP中out.print()和out.write()方法都屬於抽象類Writer的抽象子類JspWriter的方法;其中out.print()方法屬於抽象子類JspWriter中的方法,而out.write()是父類Writer的方法.

二丶out.write()與out.print()方法的區別
①該方法只能輸出字元/字元陣列/字串等等字元相關型別的資料;而對於out.print()方法是屬於子類JspWriter中的自己的抽象方法,它將所有資料都轉換為了字串的形式輸出.
②對於當兩種方法輸入的都為字串時,如果值為null,對於out.print()來說會打印出null,而對於out.write()來說會直接報出空指標異常(NullPointerException異常).

對於上述情況進行的案列分析:如果直接傳入的資料是數字時:
如果是一下程式碼:

<% out.print(1); %>
<!--<hr/>是分割線-->
<hr/>
<% out.write(1); %>

列印結果如下:
兩個方法傳入同樣的實參整數時的列印效果
上圖中out.print(1):打印出的效果是為1;而對於out.write(1):打印出來的是空,沒有值.原因何在?
因為:在out.print(1)中直接將1轉化為了字串”1”,所以顯示出來時1;而對於out.write(1)中是將1轉換為了對應的ASCII表中的字元,在對應的ASCII碼錶中1-32對應的字元在頁面上都不能顯示出來.

如果傳入的是整數97呢?
程式碼如下:

<% out.print(97); %>
<!--<hr/>是分割線-->
<hr/>
<% out.write(97); %>

顯示:
傳入整數97時的顯示效果

以下是ASCII碼錶的相關資訊:
ASCII碼錶

附帶out.write()相關原碼:

    public void write(int c) throws IOException {
        synchronized (lock) {
            if (writeBuffer == null){
                writeBuffer = new
char[writeBufferSize]; } writeBuffer[0] = (char) c; write(writeBuffer, 0, 1); } }