cari

Rumah  >  Soal Jawab  >  teks badan

Android "1"=="1" 到底是true还是false

问题:

有个代码我判断是否等于字符串的“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。见鬼了,求解。

高洛峰高洛峰2886 hari yang lalu795

membalas semua(7)saya akan balas

  • 黄舟

    黄舟2017-04-17 17:38:46

    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

    balas
    0
  • 黄舟

    黄舟2017-04-17 17:38:46

    Masalah

    JAVA bergantung pada mesin maya.

    • == Alamat memori perbandingan

    • Untuk perbandingan rentetan gunakan equal

    balas
    0
  • ringa_lee

    ringa_lee2017-04-17 17:38:46

    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

    balas
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 17:38:46

    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"

      balas
      0
  • 巴扎黑

    巴扎黑2017-04-17 17:38:46

    == 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. .

    balas
    0
  • 怪我咯

    怪我咯2017-04-17 17:38:46

    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

    balas
    0
  • PHP中文网

    PHP中文网2017-04-17 17:38:46

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

    balas
    0
  • Batalbalas