7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

null + null は "nullnull"

Last updated at Posted at 2015-12-26
Main.java
public class Main {
    public static void main(String... args) {
        String a = null;
        String b = null;

        Object c = a + b;
        
        System.out.println(c);
        System.out.println(c.getClass());
    }
}
実行結果
nullnull
class java.lang.String

逆コンパイルすると、理由が分かる。

Main.jad
// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.kpdus.com/jad.html
// Decompiler options: packimports(3) 
// Source File Name:   Main.java

import java.io.PrintStream;

public class Main
{

    public Main()
    {
    }

    public static transient void main(String args[])
    {
        String s = null;
        String s1 = null;
        String s2 = (new StringBuilder()).append(s).append(s1).toString();
        System.out.println(s2);
        System.out.println(s2.getClass());
    }
}

StringBuilderappend() に置き換えられているからですね。

ちなみに、以下はコンパイルエラー。

Main.java
public class Main {
    public static void main(String... args) {
        Object c = null + null;

        System.out.println(c);
        System.out.println(c.getClass());
    }
}
コンパイル結果
> javac Main.java
Main.java:3: エラー: 二項演算子'+'のオペランド型が不正です
        Object c = null + null;
                   ^
  最初の型: <null>
  2番目の型: <null>
エラー1個

以下ならコンパイルは通る(結果は同じ)。

Main.java
public class Main {
    public static void main(String... args) {
        Object c = (String)null + null;

        System.out.println(c);
        System.out.println(c.getClass());
    }
}
7
6
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?