Rumah Java javaTutorial Java中关于String.equals与==的对比分享

Java中关于String.equals与==的对比分享

Aug 20, 2017 am 09:36 AM
java kongsi

这篇文章主要介绍了java 中String.equals和==的比较的相关资料,需要的朋友可以参考下

 java 中String.equals和==的比较

 初学java有段时间了,但是昨晚忽然就被"asd"==getpara("password")搞得不开心了:确实JAVA很多东西和以前接触过的语言完全不一样,比如最简单的new String("asd") !=new String ("asd")。

1 一个最简单的程序:

public class A {
  public static void main(String args[]) {
    String s1 = "Hello";
    String s2 = "Hello";
    System.out.println(s1 == s2);
  }
}
Salin selepas log masuk

肯定很多人说,输出true,确实是输出true,s1和s2引用的是同一个东西嘛。但是这个程序如果换一种写法,那么肯定就不太一样了。

2 第一种变体:

public class A {
  public static void main(String args[]) {
    String s1 = "Hello";
    String s2 = new String("Hello");
    System.out.println(s1 == s2);
    System.out.println(s1.equals(s2));
  }
}
Salin selepas log masuk

或者:

public class A {
  public static void main(String args[]) {
    String s1 = new String("Hello");
    String s2 = new String("Hello");
    System.out.println(s1 == s2);
    System.out.println(s1.equals(s2));
  }
}
Salin selepas log masuk

那么结果就有点不太确定了,有些人很坏的想到了,单独拿出来,肯定至少有一个不会相等。

这两个程序的结果都是false true,原因很简单,JAVA是一个基本完全面向对象的语言,s1 == s2 判断的是他的引用(相当于内存地址、指针),equals则是使用这个对象自身的方法去判断值是否相等。

在以下表达式中:

String s1 = "Hello";
String s2 = new String("Hello");
Salin selepas log masuk

JVM得到的是两个不同的信息:

1.我要创建一个“Hello”字符串。
2.我要创建一个新的“Hello”字符串,不要跟原来的一样的。

于是,s1 != s2.

3 第二种变体:

顺序排列:

public class A {
  public static void main(String args[]) {
    String s1 = new String("Hello");
    String s2 = new String("Hello");
    String s3 = "Hello";
    s1=s1.intern();
    s2=s2.intern();
    System.out.println(s1 == s2);
    System.out.println(s1.equals(s2));
    System.out.println(s3 == s2);
    System.out.println(s3.equals(s2));
  }
}
Salin selepas log masuk

打乱顺序排列:

public class A {
  public static void main(String args[]) {
    String s1 = new String("Hello");
    String s3 = "Hello";
    s1=s1.intern();
    String s2 = new String("Hello");
    s2=s2.intern();
    //也可以String s2 = new String("Hello").intern();
    System.out.println(s1 == s2);
    System.out.println(s1.equals(s2));
    System.out.println(s3 == s2);
    System.out.println(s3.equals(s2));
  }
}
Salin selepas log masuk

那么这次应该很清楚了=

两个object,但是中间加入了一些羞羞的东西,于是答案肯定是true true true true。

那么intern到底是什么。

4 intern作用:

当调用 intern 方法时,如果池已经包含一个等于此 String 对象的字符串(该对象由 equals(Object) 方法确定),则返回池中的字符串。

否则,将此 String 对象添加到池中,并且返回此 String 对象的引用。

intern的适用情况:多个相同的大字符串同时出现的情况,例如可能出现多个相同消息的消息队列的设计。


Atas ialah kandungan terperinci Java中关于String.equals与==的对比分享. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Arahan sembang dan cara menggunakannya
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Nombor Sempurna di Jawa Nombor Sempurna di Jawa Aug 30, 2024 pm 04:28 PM

Panduan Nombor Sempurna di Jawa. Di sini kita membincangkan Definisi, Bagaimana untuk menyemak nombor Perfect dalam Java?, contoh dengan pelaksanaan kod.

Penjana Nombor Rawak di Jawa Penjana Nombor Rawak di Jawa Aug 30, 2024 pm 04:27 PM

Panduan untuk Penjana Nombor Rawak di Jawa. Di sini kita membincangkan Fungsi dalam Java dengan contoh dan dua Penjana berbeza dengan contoh lain.

Weka di Jawa Weka di Jawa Aug 30, 2024 pm 04:28 PM

Panduan untuk Weka di Jawa. Di sini kita membincangkan Pengenalan, cara menggunakan weka java, jenis platform, dan kelebihan dengan contoh.

Nombor Smith di Jawa Nombor Smith di Jawa Aug 30, 2024 pm 04:28 PM

Panduan untuk Nombor Smith di Jawa. Di sini kita membincangkan Definisi, Bagaimana untuk menyemak nombor smith di Jawa? contoh dengan pelaksanaan kod.

Soalan Temuduga Java Spring Soalan Temuduga Java Spring Aug 30, 2024 pm 04:29 PM

Dalam artikel ini, kami telah menyimpan Soalan Temuduga Spring Java yang paling banyak ditanya dengan jawapan terperinci mereka. Supaya anda boleh memecahkan temuduga.

Cuti atau kembali dari Java 8 Stream Foreach? Cuti atau kembali dari Java 8 Stream Foreach? Feb 07, 2025 pm 12:09 PM

Java 8 memperkenalkan API Stream, menyediakan cara yang kuat dan ekspresif untuk memproses koleksi data. Walau bagaimanapun, soalan biasa apabila menggunakan aliran adalah: bagaimana untuk memecahkan atau kembali dari operasi foreach? Gelung tradisional membolehkan gangguan awal atau pulangan, tetapi kaedah Foreach Stream tidak menyokong secara langsung kaedah ini. Artikel ini akan menerangkan sebab -sebab dan meneroka kaedah alternatif untuk melaksanakan penamatan pramatang dalam sistem pemprosesan aliran. Bacaan Lanjut: Penambahbaikan API Java Stream Memahami aliran aliran Kaedah Foreach adalah operasi terminal yang melakukan satu operasi pada setiap elemen dalam aliran. Niat reka bentuknya adalah

TimeStamp to Date in Java TimeStamp to Date in Java Aug 30, 2024 pm 04:28 PM

Panduan untuk TimeStamp to Date di Java. Di sini kita juga membincangkan pengenalan dan cara menukar cap waktu kepada tarikh dalam java bersama-sama dengan contoh.

Program Java untuk mencari kelantangan kapsul Program Java untuk mencari kelantangan kapsul Feb 07, 2025 am 11:37 AM

Kapsul adalah angka geometri tiga dimensi, terdiri daripada silinder dan hemisfera di kedua-dua hujungnya. Jumlah kapsul boleh dikira dengan menambahkan isipadu silinder dan jumlah hemisfera di kedua -dua hujungnya. Tutorial ini akan membincangkan cara mengira jumlah kapsul yang diberikan dalam Java menggunakan kaedah yang berbeza. Formula volum kapsul Formula untuk jumlah kapsul adalah seperti berikut: Kelantangan kapsul = isipadu isipadu silinder Dua jumlah hemisfera dalam, R: Radius hemisfera. H: Ketinggian silinder (tidak termasuk hemisfera). Contoh 1 masukkan Jejari = 5 unit Ketinggian = 10 unit Output Jilid = 1570.8 Unit padu menjelaskan Kirakan kelantangan menggunakan formula: Kelantangan = π × r2 × h (4

See all articles