java - String s=new String()与String s = ""的区别
阿神
阿神 2017-04-18 10:50:36
0
4
687

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

阿神
阿神

闭关修行中......

membalas semua(4)
左手右手慢动作

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.

阿神
  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.

洪涛

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

迷茫

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.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!