代码之家  ›  专栏  ›  技术社区  ›  user432209

在if语句中测试Java Long值。做0!=0个

  •  0
  • user432209  · 技术社区  · 14 年前

    protected void foo() {
        Date d = new Date();
        long now = d.getTime();
    
        long start;
        SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
        start = settings.getLong(FIRST_USE_DATE, 0);
        Log.w(this.getClass().getName(), Long.toString(start));     
    
        if (start == 0) {
            SharedPreferences.Editor editor = settings.edit();
            editor.putLong(FIRST_USE_DATE, now);        
        }
    

    返回真值; }

    我也试过了

    if (start == 0l) {
    if (start == 0L) {
    

    我到底错过了什么?做0!=0?

    我在Eclipse中用Java为Android开发。谢谢。

    编辑:

    @methodin-不抱歉,那不起作用。

    @我在IF语句下有一个断点,它永远不会被生成。

    Edit2:这是你问我之后我运行的实际代码。

    protected boolean isDemoExpired() {
        Date d = new Date();
        long now = d.getTime();
    
        long demoStart;
        SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);   
        demoStart = settings.getLong(FIRST_USE_DATE, 0);        
    
    if (demoStart == 0) {
        SharedPreferences.Editor editor = settings.edit();
        editor.putLong(FIRST_USE_DATE, now);
        System.out.println(Long.toString(demoStart)); 
        return false;
    
    }
    return true;
        }
    
    4 回复  |  直到 14 年前
        1
  •  3
  •   Telmo Marques    14 年前

    我认为你的问题恰恰相反。 我刚刚调试了您的代码,它工作了,问题是if语句总是正确的,因为在对第一个USE_DATE变量进行更改之后没有editor.commit()。

    protected void foo() {
        Date d = new Date();
        long now = d.getTime();
    
        long start;
        SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
        start = settings.getLong(FIRST_USE_DATE, 0);
        Log.w(this.getClass().getName(), Long.toString(start));     
    
        if (start == 0) {
            SharedPreferences.Editor editor = settings.edit();
            editor.putLong(FIRST_USE_DATE, now);
            ***editor.commit();***       
        }
    }
    

        protected boolean isDemoExpired() {
        Date d = new Date();
        long now = d.getTime();
    
        long demoStart;
        SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);   
        demoStart = settings.getLong(FIRST_USE_DATE, 0);        
    
        if (demoStart == 0) {
            SharedPreferences.Editor editor = settings.edit();
            editor.putLong(FIRST_USE_DATE, now);
            ****editor.commit();****
            System.out.println(Long.toString(demoStart)); 
            return false;
    
        }
        return true;
    }
    
        2
  •  0
  •   Vladimir Ivanov    14 年前

    为什么不使用Long start而不是Long并检查空值?

    protected void foo() {
        Date d = new Date();
        long now = d.getTime();
    
        Long start;
        SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
        start = settings.getLong(FIRST_USE_DATE, 0);
        Log.w(this.getClass().getName(), Long.toString(start));     
    
        if (start == null) {
            SharedPreferences.Editor editor = settings.edit();
            editor.putLong(FIRST_USE_DATE, now);        
        }
    }
    

    似乎自动拆箱在这里发生,你得到零值。另一个问题是为什么0==0检查不通过。

        3
  •  0
  •   pgras    14 年前

    你在某个地方犯了个错误。。。

    您确定您没有输入if语句,并且起始值为0吗?

    您可以执行以下代码(相当于您的代码)

    public static void main(String[] args) {
        long start = 0;
        if (start == 0) {
            System.out.println(Long.toString(start));
        }
    }
    

    你会看到你输入了if语句。。。

        4
  •  0
  •   BigMac66    14 年前

    我认为你的代码没有任何问题-尝试重新启动你的计算机(这是一个微软操作系统对吧?:)

    很久以前,有一次,我有一个类似的东西,直到我重新输入代码,它才消失——我最好的猜测是某个隐藏的字符引起了问题,但我再也没有见过它(我也不确定那次到底发生了什么)。