【java】字串比較分析
在敘述String類知識點的部落格中提到了字串比較有如下兩種方式:
== 和 .equals()
前者是比較變數所指向的值在堆空間上的記憶體地址值。
後者是比較字串的值。
接下來將對上述兩種方式進行分析:
使用“==”比較字串:
有如下程式碼:
String str1 = "Hello" ;
String str = new String("Hello") ;
System.out.println(str1==str);
執行結果如下:
str1和str的內容一樣呀,為什麼結果會使不相等呢?
來看如下記憶體圖分析:
可以看出,str1和str分別在堆空間中開闢了一塊新的記憶體空間存放“Hello”,而“==”是比較變數所指向的值在堆空間上的記憶體地址值,str1和str的記憶體地址值不相等,所以比較結果為false。
使用equals方法比較字串:
有如下程式碼:
String str1 = "Hello" ;
String str = new String("Hello") ;
System.out.println(str1.equals(str));
執行結果如下:
(記憶體圖同上)
equals方法比較的是字串的內容,不關心字串的記憶體地址,所以str1和str是相等的。
相關推薦
【java】字串比較分析
在敘述String類知識點的部落格中提到了字串比較有如下兩種方式: == 和 .equals() 前者是比較變數所指向的值在堆空間上的記憶體地址值。 後者是比較字串的值。 接下來將對上述兩種方式進行分析: 使用“==”比較字串: 有如下程式碼: String str1 = "
【Java】HashMap原始碼分析——基本概念
在JDK1.8後,對HashMap原始碼進行了更改,引入了紅黑樹。 在這之前,HashMap實際上就是就是陣列+連結串列的結構,由於HashMap是一張雜湊表,其會產生雜湊衝突,為了解決雜湊衝突,HashMap採用了開鏈法,即對於用物件hashCode值計算雜湊
【Java】HashMap原始碼分析——常用方法詳解
上一篇介紹了HashMap的基本概念,這一篇著重介紹HasHMap中的一些常用方法:put()get()**resize()** 首先介紹resize()這個方法,在我看來這是HashMap中一個非常重要的方法,是用來調整HashMap中table的容量的,在很多操作中多需要重新計算容量。原始碼如下: 1
【Java】字串三種空字串null、new String()、""的區別
今天寫個DEMO的時候碰到了個小麻煩,有關於題目所說的字串這三者的區別,我覺得我真的是夠了,居然會用得這麼細,不過會了也好,碰到相關的問題就可以一言不合程式碼就開寫! 既然研究,那就從結果說起,來看測試程式碼和輸出結果: // 測
【Java】BlockingQueue深入分析
一、概述: BlockingQueue作為執行緒容器,可以為執行緒同步提供有力的保障。 二、BlockingQueue定義的常用方法 1.BlockingQueue定義的常用方法如下: 丟擲異常 特殊值 阻塞 超時 插入 add(e) offer(e) put(e) offer(e, time, un
【Java】字串以某特殊字元分割處理
字串以某特殊字元分割 String mylm = "12,34,56"; String a[] = mylm.split(","); lm = a[0]; lm2 = a[1]; l
【Java】ServiceLoader原始碼分析
ServiceLoader主要的功能是用來完成對SPI的provider的載入。 先看下它的成員: 1 public final class ServiceLoader<S> 2 implements Iterable<S> { 3 4 priv
【Java】利用String的compareTo比較兩個時期字串
在《【Java】比對兩個以字串形式表示的時期是否相差超過1天》(點選開啟連結)曾經介紹過,如果利用字串的擷取來比較兩個在資料庫中取出來,被特定格式化的日期。然而,這具有一定的侷限性,最大的缺點出在擷取字串太複雜太麻煩。 其實可以利用String的compareTo比較兩個表
【Java】【Flume】Flume-NG啟動過程源代碼分析(一)
code extends fix tar top 依據 oid article gif 從bin/flume 這個shell腳本能夠看到Flume的起始於org.apache.flume.node.Application類,這是flume的main函數所在。 m
【Java】HashMap源碼分析——常用方法詳解
fir 設置 直接 dfa 構造方法 change mage null 這也 上一篇介紹了HashMap的基本概念,這一篇著重介紹HasHMap中的一些常用方法:put()get()**resize()** 首先介紹resize()這個方法,在我看來這是HashMap中一個
【Java】 劍指offer(46) 把數字翻譯成字串 《劍指Offer》Java實現合集 《劍指Offer》Java實現合集
本文參考自《劍指offer》一書,程式碼採用Java語言。 更多:《劍指Offer》Java實現合集 題目 給定一個數字,我們按照如下規則把它翻譯為字串:0翻譯成"a",1翻譯成"b",……,11翻譯成"l",……,25翻譯成"z"。一個數字可能有多個翻譯。例如12258有
【Java】 劍指offer(48) 最長不含重複字元的子字串 《劍指Offer》Java實現合集 《劍指Offer》Java實現合集
本文參考自《劍指offer》一書,程式碼採用Java語言。 更多:《劍指Offer》Java實現合集 題目 請從字串中找出一個最長的不包含重複字元的子字串,計算該最長子字串的長度。假設字串中只包含從'a'到'z'的字元。 思路 動態規劃法:定義函式f(i)為:以第i
【轉】USB 協議分析 設定USB地址 和 配置-字串描述符
USB協議深入分析 設定USB地址 前面已經解釋主控器怎麼樣傳送裝置描述符下來,然後裝置返回相應的裝置描述符。下一步主控器的動作是做什麼呢?由於在USB總線上的裝置有很多,為了區分不同的裝置通訊,就需要給每個裝置分配一個地址,這跟網路中的IP
【java】定義一個字串(可以改進為鍵盤錄入)-Scanner
package test922; import java.util.Scanner; public class ScanerTest { private static Scanner sc; public static void main(final String[
【Java】給定一個字串str,和一個字母ch,請實現相應的程式碼求出一個數組,使陣列中每個數字表示該位置與字母ch之間的最短距離。 比如str=”lexinfintech” ch=”i” 則輸出為:[3,2,1,0,1,1,0,1,2,3,4,5]
import java.util.ArrayList; import java.util.List; import java.util.Scanner; /** * @author: ycz * @date: 2018/12/17 0017 16:43 * @description: */ p
【Leetcode】844. 比較含退格字串
題目描述: 給定 S 和 T 兩個字串,當它們分別被輸入到空白的文字編輯器後,判斷二者是否相等,並返回結果。 # 代表退格字元。 示例 1: 輸入:S = "ab#c", T = "ad#c" 輸出:true 解釋:S 和 T 都會變成 “ac”。 示例 2: 輸
【java】java判斷字串A中是否包含字串B
public static void main(String[] args) { String str="ABC_001"; if(str.indexOf("ABC")!=-1){ S
【Java】檢查字串s2是否為s1旋轉而成
假定有一個方法isSubstring,可以檢查一個單詞是否為其他字串的子串。給定兩個字串S1和S2,請編寫程式碼檢查s2是否為s1旋轉而成,要求只能呼叫一次isSubstring。 比如“waterbottle”是“erbottlewat”旋轉後的字串 s1 = water
格式化字串-String.format()的使用【Java】
常規型別的格式化 String類的format()方法用於建立格式化的字串以及連線多個字串物件。熟悉C語言的同學應該記得C語言的sprintf()方法,兩者有類似之處。format()方法有兩種過載形式。 format(String format, Object… args) 新字串
【Java】Date與字串String 相互轉化的方法
Date -> String 理解Date類和Date轉 String的方法 可以參考我寫的另一篇文章 – Java用Date類獲取當前時間戳、時間戳的格式轉換方法,就不在多贅述了 String -> Date 方法與Date轉String非常的類似,需要用