Rumah  >  Soal Jawab  >  teks badan

java - String s=new String()与String s = ""的区别

是不是定义字符串如果不使用new来初始化的话相同的字符串会被定义成一个引用

阿神阿神2743 hari yang lalu694

membalas semua(4)saya akan balas

  • ringa_lee

    ringa_lee2017-04-18 10:52:36

    Storan JVM bagi String agak istimewa kerana terdapat sekeping String常量池.
    Kolam renang berterusan ini menyimpan rujukan kepada objek String.

    Sebagai contoh, String s = "abc" akan menyemak dahulu sama ada terdapat rujukan sedia ada dalam String常量池 Jika tidak, abc yang diisytiharkan akan terus menjana objek String dan menyimpan rujukan yang menunjuk ke String ini dalam objek String常量池.

    Rentetan yang diisytiharkan terus selepas

    juga akan mengikut langkah di atas, jadi kali kedua String s2 = "abc" mencari rujukan daripada String常量池 yang menunjuk ke objek rentetan yang diisytiharkan pertama.

    Dan new String("abc") akan mencipta objek baharu terus dalam timbunan tanpa memasukkan String常量池. Untuk meletakkan rujukan objek sedemikian ke dalam kolam malar melibatkan kaedah lain kelas String intern(), yang mengembalikan rujukan kolam malar objek String. Jika objek ini tiada dalam kolam malar, objek String akan dimasukkan ke dalam kolam malar dan rujukan objek yang sepadan akan dikembalikan.

    Kaedah tangkapan skrin pertama str2.intern() == str3.intern() yang digunakan dalam soalan ini juga akan mengembalikan true, dan rujukan intern() dikembalikan dengan memanggil String常量池 adalah sama.

    balas
    0
  • 阿神

    阿神2017-04-18 10:52:36

    1. Semua jenis data tidak terbina dalam dalam Java adalah rujukan.

    2. String s = new String("xx");

    3. String s = "xx";

    4. Apabila dicipta menggunakan baharu, str2 dan str3 menghala ke ruang memori yang berbeza, jadi str2 dan str3 adalah tidak sama.

    5. Apabila penetapan rentetan digunakan secara langsung, str2 dan str3 menghala ke ruang memori yang sama, jadi str2 dan str3 adalah sama.

    6. Anda boleh menggunakan str2.equals(str3) untuk membandingkan kandungan rentetan.

    balas
    0
  • PHP中文网

    PHP中文网2017-04-18 10:52:36

    Salah satunya adalah untuk menyimpan dalam kolam malar, dan satu lagi adalah untuk mencipta objek baharu dalam timbunan

    balas
    0
  • 迷茫

    迷茫2017-04-18 10:52:36

    Membantu anda memahami prosesnya. Terdapat beberapa mata dalam Java yang anda boleh ingat
    1. Semua rentetan akan dijana dalam kolam malar, sepadan dengan CONSTANT_String_info, yang tidak boleh diubah.
    2. Objek biasa hampir selalu dijana dalam timbunan (sudah tentu, terdapat juga beberapa objek khas seperti objek Kelas yang mungkin dijana dalam kawasan kaedah. Ini bergantung pada pelaksanaan mesin maya yang berbeza dan spesifikasi mesin maya tidak wajib)
    3.== Semasa membuat penentuan ini, untuk jenis rujukan, analisis akhir adalah membandingkan alamat memori.

    Baiklah, sekarang kita mempunyai konsep di atas. Dalam soalan pertama,
    String s1 = new String("aaa"); Apabila anda mencipta objek baharu, jvm akan membantu anda membuka ruang objek pada timbunan, dan s1 disimpan dalam jadual pembolehubah setempat anda menunjuk ke ruang objek ini (ia boleh difahami buat sementara waktu bahawa s1 menyimpan alamat ruang objek). Jadi anda mencipta dua yang baharu, iaitu dua ruang objek yang berbeza. ==Penghakiman sudah tentu berbeza, kerana s1 dan s2 menunjuk ke ruang yang berbeza.

    Soalan kedua, titik pertama di atas, setiap rentetan hanya akan wujud dalam satu salinan dalam kolam malar, jadi str2 menunjuk ke alamat rentetan kolam malar ini, dan str3 juga menunjuk ke alamat rentetan kolam malar ini. ==Penghakiman secara semula jadi adalah sama.

    balas
    0
  • Batalbalas