Android "1"=="1" 到底是true还是false
高洛峰
高洛峰 2017-04-17 17:36:46
0
7
791

问题:

有个代码我判断是否等于字符串的“1”,因是新手不小心用了==,结果发生了很奇妙的问题。

Util u = new Util();
boolean result = u.getId() == "1";
Toast.makeText(this, String.valueOf(result), Toast.LENGTH_SHORT).show();
  1. 结果在手机上运行会提示true(部分华为Android版本5.0以下手机会提示false)

  2. 在IDE中调试结果是false

看截图,调度过程中代码后面显示的result:true,可是在计算窗口中显示为false。见鬼了,求解。

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

membalas semua(7)
黄舟

Terdapat ingatan timbunan (heap) dalam ingatan Java yang mudah bermakna semua yang baru keluar adalah dalam ingatan timbunan.
Terdapat juga kawasan memori java yang dipanggil kolam malar, seperti pemalar rentetan, yang semuanya wujud di sini, seperti "1" mesti berada dalam kolam malar kunci terletak pada u.getId() Nilai berada dalam kumpulan malar atau dalam ingatan timbunan. Ini bergantung pada kod sumber kaedah pembinaan Util. Dalam tangkapan skrin, "1" dikembalikan secara langsung Ini bermakna semasa penyahpepijatan, mesin maya telah memperuntukkan dua keping memori dalam kumpulan malar, dan Android secara langsung berkongsi bahagian memori yang sama. Diskriminasi bergantung pada mood penyusun. Cuba untuk tidak menggunakan == pada masa hadapan, gunakan sama dengan

黄舟

Masalah

JAVA bergantung pada mesin maya.

  • == Alamat memori perbandingan

  • Untuk perbandingan rentetan gunakan equal

左手右手慢动作

Watak harus dibandingkan menggunakan sama, dan jenis asas harus dibandingkan menggunakan "==". Oleh kerana jenis asas disimpan dalam ingatan, "==" ialah alamat storan dalam memori untuk perbandingan Jika ia adalah jenis komposit seperti aksara, walaupun ia dilihat pada pandangan pertama, alamat storan mungkin berbeza, jadi jika. anda menggunakan "==" ada kemungkinan Ia mungkin benar, ia mungkin palsu

伊谢尔伦
  1. == mempunyai keutamaan yang lebih tinggi daripada =

  2. == membandingkan alamat, sama dengan nilai yang dibandingkan;

  3. == adalah untuk membandingkan sama ada alamat dua rentetan adalah sama, iaitu, sama ada ia merujuk kepada rentetan yang sama
  4. String disimpan dalam kumpulan malar dan hanya satu salinan literal disimpan, jadi alamat akan sama, yang bermaksud
  5. mengembalikan benar.

    "1"=="1"

巴扎黑

== membandingkan alamat Apabila dijalankan secara langsung, rumah maya menilai bahawa "1" dan "1" adalah objek tetap yang sama, iaitu alamat yang sama, jadi ia kembali benar. Apabila nyahpepijat, mekanismenya mungkin berbeza (mungkin kerana mod penyahpepijatan digunakan), menyebabkan mesin maya berfikir bahawa dua rentetan '1' bukan objek yang sama, dan mengembalikan palsu. Jadi, abaikan sahaja perkara ini. .

刘奇

Mengikut susunan penghuraian operator aritmetik = adalah sebelum ==
Jadi hasil = u.getId() dihuraikan dahulu, dan hasil operasi penugasan ialah Boolean true
Jadi benar==“ 1”. Anda harus mempelajari topik sama ada benar sama dengan "1". Secara teorinya ia palsu.
"1" ialah rentetan, bukan int 1 dan int 1 sememangnya boleh dinyatakan sebagai jenis Boolean true

洪涛

Jika rentetan yang ingin anda bandingkan adalah semua nombor, anda boleh menggunakan Integer.parse untuk menukarnya.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan