这个问题可能比较简单,但我真的被搞糊涂了
问题还是由String比较引发的
网上看都说 == 是比较地址,然后String类中重写了equal的方法使其能够比较内容
那么问题来了
如果两个int值相等的进行比较,为什么输出的是true
public class Test{
public static void main(String[] args)
{
int i = 5;
int b = 5;
Integer c = new Integer(5);
if(i == b)
{
System.out.println("ok");
}
if(i == c)
{
System.out.println("ok");
}
}
}
结果的话理所当然都是输出ok,但是两个int 的地址肯定不相同,请高人点化下
Untuk objek == sentiasa alamat perbandingan. Jika anda mempunyai int di satu sisi dan Integer di sisi yang lain, anda boleh menukar Integer menjadi int dan membandingkan nilainya. Ini dipanggil unboxing automatik.
1.int ialah salah satu daripada 8 jenis data asas, yang hanya menyimpan nilai berangka
2.Integer ialah jenis data yang kompleks, yang bermaksud ia ialah kelas
Berikut ialah objek Integer yang dicipta Objek mempunyai alamat dan nilai yang disimpan di alamatnya == digunakan untuk membandingkan alamat, dan sama digunakan untuk membandingkan nilai. Objek dicipta pada timbunan, dan rujukannya menunjuk ke alamatnya pada timbunan. Semua jenis data asas, untuk meningkatkan kecekapan pengiraan dan sebab lain, menunjuk kepada nilai mudah, dan kebanyakan lokasinya berada pada memori tindanan, kecuali tatasusunan jenis data asas. Ini sedikit bertentangan dengan prinsip berorientasikan objek Ia hanya menunjuk kepada nilai berangka, jadi apa yang boleh dibandingkan hanyalah perbandingan nilai berangka tulen.
Integer akan cache -128~127, jadi keputusan membandingkan Integer, sama dan == dalam julat ini adalah sama.
Situasi khusus jdk kod sumber Integer.IntegerCache