java new对象 User user; 和 User user = null; 有什么区别
PHP中文网
PHP中文网 2017-04-18 10:32:27
0
5
710

User user;

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

PHP中文网
PHP中文网

认证高级PHP讲师

全員に返信(5)
洪涛

これは 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
    阿神

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

    配属後は変化なし

    いいねを押す +0
    PHPzhong

    同じみたいですね

    いいねを押す +0
    Ty80

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

    いいねを押す +0
    PHPzhong

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

    いいねを押す +0
    人気のチュートリアル
    詳細>
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート
    私たちについて 免責事項 Sitemap
    PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!