ホームページ  >  に質問  >  本文

java new对象 User user; 和 User user = null; 有什么区别

User user;

User user = null;
这两种写法有什么区别呢?

PHP中文网PHP中文网2741日前715

全員に返信(5)返信します

  • PHP中文网

    PHP中文网2017-04-18 10:34:27

    これは User user; がどこに表示されるかによって異なります。結論を先に言いましょう: User user;出现在哪里,先放结论:

    1. 如果是对象的属性(field),则两种写法没有区别。

    2. 如果是方法中的局部变量,若方法中没有其他地方对user赋值,则编译错误。

    如果是对象的属性,那么在编译的时候,java编译器会自动为field赋初值(原始类型为默认值;引用类型为null)。例如下面的代码:

    public class TestInitialization {
        private User userA;
    }

    编译后,使用javap查看字节码,红色部分为编译器自动赋初值的过程:

    如果是方法中的局部变量,编译器不会自动赋初值。User user;只是定义的变量user,但并未给user在内存中分配空间,没有初始化,无法通过编译;User user = null; <オル>

  • オブジェクトの属性(フィールド)であれば、どちらの書き方でも違いはありません。 🎜
  • 🎜メソッド内のローカル変数の場合、メソッド内にユーザーに値を代入する場所が他にない場合、コンパイルエラーが発生します。 🎜
  • 🎜それがオブジェクトの属性である場合、コンパイル中に Java コンパイラーはフィールドに初期値を自動的に割り当てます (元の型がデフォルト値、参照型は null)。たとえば、次のコード: 🎜 リーリー 🎜コンパイル後、javap を使用してバイトコードを表示します。赤い部分は、コンパイラーが自動的に初期値を割り当てるプロセスです。
    🎜 🎜それがメソッド内のローカル変数である場合、コンパイラーは自動的に初期値を割り当てません。 User user; は定義された変数 user にすぎませんが、ユーザーにメモリ領域を割り当てず、初期化されず、User user = null; を渡すこともできません。変数 user を定義し、メモリ空間も user に割り当てられるため、user は null を指すようになります。 🎜 リーリー

    返事
    0
  • 阿神

    阿神2017-04-18 10:34:27

    user がローカル変数の場合: 最初の代入 (null への初期化を含む) の前に user を使用すると、コンパイル エラーになります

    配属後は変化なし

    返事
    0
  • PHPz

    PHPz2017-04-18 10:34:27

    同じみたいですね

    返事
    0
  • PHP中文网

    PHP中文网2017-04-18 10:34:27

    違いはありません、デフォルトの初期化値は null です

    返事
    0
  • PHPz

    PHPz2017-04-18 10:34:27

    いいえ = スタックに彼のスペースがありません。 =null を追加すると、スタック内の空のプレースホルダーが指定されます

    返事
    0
  • キャンセル返事