簡體   English   中英

不工作在Java中的字符串比較

[英]Not working String comparison in Java

此代碼無效:

String name = "Bob";
String name1 = "Anne";
if name = name1;
System.out.println ("Hello");

我是Java的初學者,請幫助我們使用這段代碼。 我想比較兩個字符串。

你要:

if (name.equals(name1))

請注意,你想要

if (name == name1)

這在語法上是正確的,但會比較兩個字符串引用的相等性,而不是比較所涉及的對象是否代表相同的字符序列

此外,請注意,即使是頂級版本也只是對字符串中的UTF-16代碼單元進行序數比較。 如果兩個字符串在邏輯上代表相同的字符但形式不同,則可能無法獲得預期的結果。 如果你想進行文化敏感的比較,你應該看看Collator

另外,我建議如果你真的是Java的新手,你可以從控制台應用程序和/或單元測試開始探索語言而不是JSP - 它會讓你在學習的過程中獲得更順暢的循環基礎知識,以及更簡單的工作環境。

更重要的是,如果name是空引用,則頂部給出的代碼將拋出NullPointerException 你應該考慮在那一點你想要發生什么 - 如果字符串為null無論如何都會代表一個bug,那么異常可能是合適的; 否則,您可能想要更改代碼。 Guava中有一個有用的方法(它充滿了好東西)是Objects.equal

if (Objects.equal(name, name1))

如果兩個參數都為null,則返回true;如果只有一個參數為null,則返回false;如果它們都是非null,則返回調用equals()的結果。 非常便利。

你的錯誤:

  1. 您正在使用"="運算符來比較字符串。 它不是一個條件運算符,它是一個賦值運算符。 Java中的條件運算符是"==" ,用於比較兩個值是否相等。 你甚至不能將這個用於Strings。

  2. 你寫的是這樣的:

     if name = name1; System.out.println ("Hello"); 

你在if語句的末尾放了一個分號。 所以它什么都不做(如果你的條件應該是正確的,這不是在這種情況下),但條件是否正確。

  1. 你缺少圍繞if語句中給出的條件的parantheses。

     Synatx of if statement is : if(condition) 

所以必須在你的病情周圍寫上"()"

現在,為了比較字符串,String類為我們提供了以下方法:

stringOne.equals(stringTwo)

它檢查完全相同的字符串。

要么

stringOne.equalsIgnoreCase(stringTwo)

它將忽略Caps-Small字母案例。

你必須比較這兩個變量

if (name.equals(name1)) 

這應該工作,而不是你的方式!

if(name.equals(name1))
  System.out.println("Hello");

==僅在比較int或long等基元時才有效。 如果要比較String,則必須使用equals()或compareTo()。 Single =是一個賦值而不是通過執行name = name1進行比較,你基本上將字符串name1賦給變量名。

您發布的代碼不是真正的Java。 此外,您不要將'=='與賦值運算符'='進行比較。 最后,為了正確比較'對象'或來自Object的任何東西,你需要使用.equals(...)方法。

==比較意味着“是同一個對象”,而不是“是具有相同值的對象”。 差異似乎很小; 但是,如果您選擇按對象比較對象,則它根本不小。 可以使用相同的“值”創建兩個Object ,並且只有.equals(...)允許您將這兩個Object視為相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM