一个有趣的问题null != null ?

用json-lib 处理数据时发现一个有趣的问题?
下面的程序将输出:
aa :: null
bb :: false
cc :: false
dd :: false

null != null ? 那他到底是什么呢?

[code="java"]package com.xy51wan.bean;

import net.sf.json.JSONObject;

public class Basic_Action_Bean {
private String action;
private JSONObject parameters;

public Basic_Action_Bean(String json) {
    JSONObject jo = JSONObject.fromObject(json);
    action = jo.getString("action");        
    //if (jo.get("parameters") != null) {
        parameters = JSONObject.fromObject(jo.get("parameters"));
    //}
    jo = null;
}   

public String getAction() {
    return action;
}



public void setAction(String action) {
    this.action = action;
}



public JSONObject getParameters() {
    return parameters;
}   

public Object getParameter(String key){
    if(parameters != null){         
        System.out.println("aa :: " +   parameters);
        System.out.println("bb :: " +   parameters.equals("null"));
        System.out.println("cc :: " +  (parameters == null));
        System.out.println("dd :: " +  (parameters.equals(null)));  
    }
    return null;
}



public static void main(String args[]){
    //Basic_Action_Bean b = new Basic_Action_Bean("{\"action\":\"getAA\",\"parameters\":{\"a\":100,\"b\":\"2009-04-07\"}}");
    Basic_Action_Bean b = new Basic_Action_Bean("{\"action\":\"getAA\"}");  
    b.getParameter("a");        
}

}
[/code]
[b]问题补充:[/b]
用json-lib 处理数据时发现一个有趣的问题?
下面的程序将输出:
aa :: null
bb :: false
cc :: false
dd :: false

null != null ? 那他到底是什么呢?

[code="java"]import net.sf.json.JSONObject;

public class Basic_Action_Bean {
private String action;
private JSONObject parameters;

public Basic_Action_Bean(String json) {
    JSONObject jo = JSONObject.fromObject(json);
    action = jo.getString("action");        
    //if (jo.get("parameters") != null) {
        parameters = JSONObject.fromObject(jo.get("parameters"));
    //}
    jo = null;
}   

public String getAction() {
    return action;
}



public void setAction(String action) {
    this.action = action;
}



public JSONObject getParameters() {
    return parameters;
}   

public Object getParameter(String key){
    if(parameters != null){         
        System.out.println("aa :: " +   parameters);
        System.out.println("bb :: " +   parameters.equals("null"));
        System.out.println("cc :: " +  (parameters == null));
        System.out.println("dd :: " +  (parameters.equals(null)));  
    }
    return null;
}



public static void main(String args[]){
    //Basic_Action_Bean b = new Basic_Action_Bean("{\"action\":\"getAA\",\"parameters\":{\"a\":100,\"b\":\"2009-04-07\"}}");
    Basic_Action_Bean b = new Basic_Action_Bean("{\"action\":\"getAA\"}");  
    b.getParameter("a");        
}

}
[/code]

你的理解是错的,
这就要看JSONObject 的toStirng()方法了

public String toString() {
if( isNullObject() ){
return JSONNull.getInstance()
.toString();
}
try{
Iterator keys = keys();
StringBuffer sb = new StringBuffer( "{" );

     while( keys.hasNext() ){
        if( sb.length() > 1 ){
           sb.append( ',' );
        }
        Object o = keys.next();
        sb.append( JSONUtils.quote( o.toString() ) );
        sb.append( ':' );
        sb.append( JSONUtils.valueToString( this.properties.get( o ) ) );
     }
     sb.append( '}' );
     return sb.toString();
  }catch( Exception e ){
     return null;
  }

}

[code="java"]

package com.xy51wan.bean;

import net.sf.json.JSONObject;

public class Basic_Action_Bean {
private String action;
private JSONObject parameters;

public Basic_Action_Bean(String json) {
    JSONObject jo = JSONObject.fromObject(json);
    action = jo.getString("action");        
    //if (jo.get("parameters") != null) {
        parameters = JSONObject.fromObject(jo.get("parameters"));
    //}
    jo = null;
}   

public String getAction() {
    return action;
}



public void setAction(String action) {
    this.action = action;
}



public JSONObject getParameters() {
    return parameters;
}   

public Object getParameter(String key){
            //因为parameters 是一个JSONObject对象,当然不等于null
    if(parameters != null){     
                    //这里打印的时候会调用parameters.toString()方法,返回null
        System.out.println("aa :: " +   parameters);
            //后面的就不用说了,当然都不相等
        System.out.println("bb :: " +   parameters.equals("null"));
        System.out.println("cc :: " +  (parameters == null));
        System.out.println("dd :: " +  (parameters.equals(null)));  
    }
    return null;
}



public static void main(String args[]){
    //Basic_Action_Bean b = new Basic_Action_Bean("{\"action\":\"getAA\",\"parameters\":{\"a\":100,\"b\":\"2009-04-07\"}}");
    Basic_Action_Bean b = new Basic_Action_Bean("{\"action\":\"getAA\"}");  
    b.getParameter("a");        
}

}

[/code]