Java中的字符串附加运算符

时间:2013-08-27 09:27:54

标签: android string android-arrayadapter tostring

最近我正在开发一个应用程序,以在数组适配器中显示一些文件信息。

所以我的代码看起来像这样:

AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this)
        .setIcon(R.drawable.ic_launcher).setTitle("Details");
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(
         DriveActivity.this, android.R.layout.select_dialog_item);
// Case 1
String DIR_NAME = "Directory Name : " + 
         (itemSelectedFile.getTitle() != null ? itemSelectedFile.getTitle() : "");

arrayAdapter.add(DIR_NAME);
// Case 3
arrayAdapter.add(("Directory Md5 Checksum : " + 
                  (itemSelectedFile.getMd5Checksum() != null ?
                       itemSelectedFile.getMd5Checksum(): "").toString()));

// Case 2
arrayAdapter.add("Directory Mime Type : " + 
                 itemSelectedFile.getMimeType() != null ?
                     itemSelectedFile.getMimeType() : "");

正如您所看到的,我通过三种方式将项目添加到ArrayAdapter中:

  1. 通过从字符串字符串中删除字符串。
  2. 通过直接在ArrayAdapter的参数化add()方法中添加两个字符串,而不在两个段上使用toString()方法。
  3. 通过在两个段上使用toString()方法在ArrayAdapter的参数化add()方法中直接添加两个字符串。
  4. 我在案例1和案例中获得了不同的结果。 3和2

    如果是1和3,我的预期结果为

    1. 目录名称:Cat
    2. 目录Md5校验和:'check_sum'
    3. 但在案例2中,我得到的是:“mime / type”(没有附加“目录Mime类型:”!!!) 在某些情况下,当mimetype为null时,我得到一个NULL指针异常 有人请解释我在这里发生的事情。

2 个答案:

答案 0 :(得分:2)

此表达式中的运算符优先级问题

        "Directory Mime Type : " + 
             itemSelectedFile.getMimeType() != null ?
                 itemSelectedFile.getMimeType() : ""

三元运算符(?)的优先级低于+!=

这意味着表达式实际上与此相同:

        (("Directory Mime Type : " + 
             itemSelectedFile.getMimeType()) != null) ?
                 itemSelectedFile.getMimeType() : ""

答案 1 :(得分:0)

你有一点错误。你忘了“()”:

arrayAdapter.add("Directory Mime Type : " + 
             (itemSelectedFile.getMimeType() != null ?
                 itemSelectedFile.getMimeType() : ""));

你在案例2中有这些,但在案例3中没有。这就是为什么你的代码等于这些:

arrayAdapter.add(("Directory Mime Type : " + 
             itemSelectedFile.getMimeType() != null) ?
                 itemSelectedFile.getMimeType() : "");

你有空指针异常,因为你的itemSelectedFile = null,我猜。在调用getMimeType()之前,你必须检查它。