這個問題在這里已經有了答案: 如何比較 Java 中的字串? (23 個回答) 5 小時前關閉。
大家好,我正在從事一個在 java 中創建我自己的自定義日期選擇器的專案。但是我在使用 split 方法時卡在了一個地方。當我將一個字串拆分為字串陣列,并在陣列中運行一個回圈以查找特定值,如果在陣列中找到該特定值,則列印“找到了 blalala 的值,但它沒有按我期望的方式作業。即使“dd”可用,它也不會列印“dd is here”。將在此處提供下面的代碼
public static void main(String[] args) {
String date="dd/mm/yyyy";
String[] datesplit=date.split("/", 5);
for(int c=0;c<=2;c )
{
if(datesplit[c]=="dd")
{
System.out.println("dd is here");
}
}
}
但是如果我遍歷陣列并列印每個值,它會輸出每個值
public static void main(String[] args) {
String date="dd/mm/yyyy";
String[] datesplit=date.split("/", 5);
for(int c=0;c<=2;c )
{
System.out.println(datesplit[c]);
}
但我已經通過手動創建一個陣列然后回圈遍歷它以找到我想要的值并列印“找到值”來嘗試不使用 split 方法。令人驚訝的是它有效。
public static void main(String[] args) {
String[] date={"dd","mm","yyyy"};
for(int c=0;c<=2;c )
{
if(date[c]=="dd")
{
System.out.println("dd is here");
}
}
我很困惑為什么使用拆分方法()時陣列有問題。任何想法
uj5u.com熱心網友回復:
您使用 == 運算子面對兩個參考。
if(datesplit[c]=="dd")
你不能那樣做。參考必須面對equals方法。操作員檢查兩個變數的==內容。參考包含它指向的物件的記憶體地址,因此當您執行時if(datesplit[c]=="dd"),您正在檢查其中包含的地址datesplit[c]是否等于包含“dd”的參考的地址,這當然是不同的,因為它們指向到記憶體中的兩個不同物件。==只能用于原始型別,因為它們包含它們所代表的實際值。
你需要做的是用這樣的equals方法寫你的比較:
public static void main(String[] args) {
String date = "dd/mm/yyyy";
String[] datesplit = date.split("/", 5);
for (int c = 0; c <= 2; c ) {
if (datesplit[c].equals("dd")) {
System.out.println("dd is here");
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/473524.html
