maoxiaolu 2009-04-27 11:48
浏览 164
已采纳

一个有趣的问题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]

  • 写回答

1条回答 默认 最新

  • wanghaolovezlq 2009-04-27 12:03
    关注

    你的理解是错的,
    这就要看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]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?