2

我正在通过记事本应用程序的 android 示例的第二个练习,我有一个关于用于定义 mRowId 的 Long 和 long 之间的区别的问题。

练习在这里:http: //developer.android.com/resources/tutorials/notepad/notepad-ex2.html

下面是我遇到问题的代码片段:

public class NoteEdit extends Activity {

private Long mRowId; 
private EditText mTitleText;
private EditText mBodyText; 

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);

    setContentView(R.layout.note_edit);
    setTitle(R.string.edit_note);

    mTitleText = (EditText) findViewById(R.id.title);
    mBodyText = (EditText) findViewById(R.id.body);
    Button confirmButton = (Button) findViewById(R.id.confirm);

    mRowId = null;

当我用 声明 mRowId 时long,尝试将 mRowId 设置为 null 时出现错误,错误是“类型不匹配”。但如果我使用Long,错误就会消失。为什么不起作用long

4

2 回答 2

3

Long是围绕原语 long的包装类。因此Long是一个对象;对象可以null,基元不能。

请参阅Long类文档

于 2011-09-13T19:04:48.070 回答
0

long是原始类型并且Long是盒装类型long。在java中释放自动装箱功能后,原语long可以自动转换为Long对象。

但有时这也会产生问题。例如下面的代码非常慢:

public static void main(String[] args)
{
    Long sum = 0L;
    for(long i=0; i < Integer.MAX_VAL; i++){
        sum+=i;
    }
}

这是因为程序无意中创建了 2^31 个对象,因为sum声明中的大写 L。

于 2013-09-14T04:06:28.103 回答