這篇文章主要講解了“字符串 len == 0 和 字符串== "" 的區(qū)別有哪些”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“字符串 len == 0 和 字符串== "" 的區(qū)別有哪些”吧!
創(chuàng)新互聯(lián)公司專注于企業(yè)營銷型網(wǎng)站建設(shè)、網(wǎng)站重做改版、宏偉網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、HTML5建站、商城網(wǎng)站制作、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)營銷網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為宏偉等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
在測試的方法中,我們分別聲明了 Test1 和 Test2 方法:
func Test1() bool { var v string if v == "" { return true } return false } func Test2() bool { var v string if len(v) == 0 { return true } return false }
在方法內(nèi)部僅做了簡單的變量類型聲明,分別以 字符串 == "" 和 字符串 len == 0 為判斷依據(jù)。
測試用例
編寫兩個方法的 Benchmark,用于后續(xù)的性能測試:
func BenchmarkTest1(b *testing.B) { for i := 0; i < b.N; i++ { Test1() } } func BenchmarkTest2(b *testing.B) { for i := 0; i < b.N; i++ { Test2() } }
結(jié)果分析
$ go test --bench=. -benchmem goos: darwin goarch: amd64 BenchmarkTest1-4 1000000000 0.305 ns/op 0 B/op 0 allocs/op BenchmarkTest2-4 1000000000 0.305 ns/op 0 B/op 0 allocs/op PASS ok _/Users/eddycjy/go-application/awesomeProject/tests 0.688s
從多次測試的結(jié)果來看,兩者比較:
性能幾乎沒有區(qū)別,甚至可以出現(xiàn)一模一樣的情況。
均不涉及內(nèi)存申請和操作,均為 0/op。說明變量并不是聲明了,就有初始化動作的,這塊 Go 編譯器有做優(yōu)化。
結(jié)果上居然是一樣的。根據(jù)曹大的提示,我們可以進(jìn)一步看一下兩者的匯編代碼,看看具體區(qū)別在哪里:
$ go tool compile -S main.go "".main STEXT nosplit size=1 args=0x0 locals=0x0 0x0000 00000 (main.go:3) TEXT "".main(sb), NOSPLIT|ABIInternal, $0-0 0x0000 00000 (main.go:3) FUNCDATA $0, gclocals·33cdeccccebe80329f1fdbee7f5874cb(sb) 0x0000 00000 (main.go:3) FUNCDATA $1, gclocals·33cdeccccebe80329f1fdbee7f5874cb(sb) 0x0000 00000 (main.go:5) RET 0x0000 c3 . go.cuinfo.packagename. SDWARFINFO dupok size=0 0x0000 6d 61 69 6e main ""..inittask SNOPTRDATA size=24 0x0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0x0010 00 00 00 00 00 00 00 00 ........ gclocals·33cdeccccebe80329f1fdbee7f5874cb SRODATA dupok size=8 0x0000 01 00 00 00 00 00 00 00
無論是 len(v) == 0,又或是 v == "" 的判斷,其編譯出來的匯編代碼都是完全一致的。可以明確 Go 編譯器在這塊做了明確的優(yōu)化,大概率是直接比對了。
因此在 Go 語言中 字符串 len == 0 和 字符串 == "" 的判定,這兩者可以認(rèn)為是沒有區(qū)別的。
感謝各位的閱讀,以上就是“字符串 len == 0 和 字符串== "" 的區(qū)別有哪些”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對字符串 len == 0 和 字符串== "" 的區(qū)別有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!
網(wǎng)站標(biāo)題:字符串len==0和字符串==""的區(qū)別有哪些
網(wǎng)站路徑:http://chinadenli.net/article6/gieeog.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、移動網(wǎng)站建設(shè)、做網(wǎng)站、靜態(tài)網(wǎng)站、云服務(wù)器、網(wǎng)站收錄
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)