int、char、doubleなどはすべてプリミティブであり、「new」を使用してインスタンス化する必要がないことを意味します。Integer、Character、Doubleのようなものは、コンピューター上でより多くのスペースを占めるオブジェクトです(オブジェクトのオーバーヘッドが多いため)が、Integer.parse()のようなメソッドを使用できます。一般に、プリミティブを使用し、メソッドの1つが必要な場合にのみオブジェクトバージョンを使用します。
a == b vs a.equals(b)についての質問に答えるには:
Integer a = new Integer(5);
Integer b = new Integer(5);
それらは同じ値ですが(これは.equalsがテストするものです)、「新しい」と2回言ったため、同じメモリではありません。a!= bがa.equals(b)
Integer a = new Integer(5);
Integer b = a;
これで、同じメモリを使用するようになりました。つまり、一方を変更すると、両方を変更します(「新規」を再度使用しない限り)。a == bおよびa.equals(b)
//using last code block
b = new Integer(5);
ここでも、a!= bですが、a.equals(b)== trueです。これも、同じ値ですが、メモリの異なる部分にあるためです。