2014-10-17 4 views
0

У меня есть функция, которая возвращает String, но сначала я проверяю, является ли String нулевым, если это так, я возвращаю null.Почему этот метод печати работает? разве это не так?

моя функция

String decode(String input);
это может возвращать нулевое значение, если вход нуль так, если я decode(null()), он должен вернуть null, верно? и println(null) не следует печатать "null", правильно?

Ссылка на код, который может быть запущен: http://ideone.com/bLreXJ

import java.util.*; 
import java.lang.*; 
import java.io.*; 

class Testing 
{ 
    public static void main (String[] args) throws java.lang.Exception 
    { 
     String input = null; 
     // get input in some manner 

     input = "www.me%20.com"; 
     System.out.println(decode(input)); // returns "www.me .com" 

     input = "https://www.google.com/webhp?#q=java%20hi%20there"; 
     System.out.println(decode(input)); // returns "https://www.google.com/webhp?#q=java hi there" 

     input = " "; 
     System.out.println(decode(input)); // returns "" 

     input = null; 
     System.out.println(decode(input)); // returns "null" , but why? 

     // System.out.println(null); // this fails because println doesn't accept null 
    } 

    public static String decode(String input){ 
     if(input == null) 
      return null; 
     String[] strArr = input.split("%20"); 
     StringBuilder sb = new StringBuilder(""); 
     for(String a : strArr){ 
      sb.append(a).append(" "); 
     } 
     return sb.toString().trim(); 
    } 
} 
+0

Потому что 'System.out.println (null)' будет печатать 'null' буквально. – TactMayers

ответ

2

Вы писали

// System.out.println(null); // this fails because println doesn't accept null 

вы уверены в этом?

PrintStream.println вызывает String.valueOf, который преобразует null в строку "null".

+0

А, это объяснение, в котором я нуждался. Благодарю. – SoluableNonagon

+2

Проблема в том, что 'null' не имеет типа, поэтому это приводит к ошибке компилятора, потому что java не знает, какой перегруженный метод для вызова. Сначала передайте значение в String: 'System.out.println ((String) null);' – user3001