长和长的区别?

时间:2011-09-13 19:00:35

标签: android long-integer notepad

我正在通过Android示例的第二次练习记事本app,我有一个关于用于定义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;

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

2 个答案:

答案 0 :(得分:3)

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

请参阅Long class documentation

答案 1 :(得分:0)

long是原始类型,Longlong的盒装类型。在java中发布自动装箱功能后,原始long可以自动转换为Long,这是一个对象。

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

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

这是因为程序由于sum声明中的大写字母L而无意中不必要地创建了2 ^ 31个对象。