我的java if语句似乎不起作用

时间:2011-12-07 17:00:22

标签: java android zxing

我不知道为什么但是当我在我的Android应用程序中使用zxing来获取条形码时,格式返回为EAN_13,但是如果我的确定它不是,那么在我的Toast通知中显示EAN_13。关于它为何被破坏的任何线索?

public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
    if (scanResult != null) {
        if (resultCode == 0){
            //If the user cancels the scan
            Toast.makeText(getApplicationContext(),"You cancelled the scan", 3).show();
        }
        else{
            String contents = intent.getStringExtra("SCAN_RESULT");
            String format = intent.getStringExtra("SCAN_RESULT_FORMAT").toString();
            if (format == "EAN_13"){
                //If the barcode scanned is of the correct type then pass the barcode into the search method to get the product details
                Toast.makeText(getApplicationContext(),"You scanned " + contents, 3).show();
            }
            else{
                //If the barcode is not of the correct type then display a notification
                Toast.makeText(getApplicationContext(),contents+" "+format, 3).show();
            }
        }
    }
}

public void onActivityResult(int requestCode, int resultCode, Intent intent) { IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent); if (scanResult != null) { if (resultCode == 0){ //If the user cancels the scan Toast.makeText(getApplicationContext(),"You cancelled the scan", 3).show(); } else{ String contents = intent.getStringExtra("SCAN_RESULT"); String format = intent.getStringExtra("SCAN_RESULT_FORMAT").toString(); if (format == "EAN_13"){ //If the barcode scanned is of the correct type then pass the barcode into the search method to get the product details Toast.makeText(getApplicationContext(),"You scanned " + contents, 3).show(); } else{ //If the barcode is not of the correct type then display a notification Toast.makeText(getApplicationContext(),contents+" "+format, 3).show(); } } } }

4 个答案:

答案 0 :(得分:7)

在Java中,你不能(好吧,不应该)使用==运算符来比较两个字符串。你应该使用:

if (stringOne.equals(stringTwo)) { ... }

或者,在您的情况下:

if ("EAN_13".equals(format)) { ... }

在Java中,使用对象时,double equals运算符通过引用相等比较两个对象。如果你有两个字符串:

String one = "Cat";
String two = "Cat";
boolean refEquals = (one == two); // false (usually.)
boolean objEquals = one.equals(two); // true

我说通常不会是真的,因为根据系统中如何实现字符串的创建,它可以通过允许两个变量指向同一块来节省内存的记忆。但是,期望这种方法起作用的做法非常糟糕。

旁注:使用上述策略时,您必须确保第一个字符串不是null,否则您将抛出NullPointerException。如果您能够在项目中包含外部库,我会推荐Apache Commons Lang库,它允许:

StringUtils.equals(stringOne, stringTwo);

答案 1 :(得分:3)

使用==时,您要比较两个引用,看它们是否是同一个对象(即它们指向内存中的相同地址),而不是比较对象的值。请改用format.equals("EAN_13")

答案 2 :(得分:2)

对于String比较,您应该使用.equals()方法,实际上这是对两个对象进行比较,并且此方法属于java中的Object类。 e.g:

        String val = "abc";
        if(val.equals("abc")){
           System.out.println("stings are equal!");
        }

另一方面,您可以在Comparable接口中使用.compareTo()函数, 如参见:

String val = "abc";
 if(val.compareTo("abc")==0){
   System.out.println("stings are equal!");
 }

**这与上述相同。

答案 3 :(得分:1)

在java中,你无法将String与==进行比较  因此,请使用.compareTo("str").equals()方法替换这些运算符。