本文主要參考了the go programming language specification中的comparison_operators。加入了自己的一些理解和示例。
如果兩個變數是可比較的(使用==或!=),那它們必可以相互賦值。這意味著可比較的兩個變數必須是同一型別,或者他們的底層型別相同。
可比較可比較
可比較可比較。
可比較可比較。
兩個指標指向同乙個變數,則這兩個指標相等,或者兩個指標同為nil,它們也相等。指標值可以與nil比較。
var num1, num2 int
num1 =
8 num2 =
8 pt1 :=
&num1
pt2 :=
&num1
pt3 :=
&num2
//定義乙個空指標
var pt4 *
int//只有指向同乙個變數,兩個指標才相等
//輸出:true false
fmt.
printf
("%v %v\n"
, pt1 == pt2, pt1 == pt3)
//指標可以與nil直接比較
//輸出:true false
fmt.
printf
("%v %v\n"
, pt4 ==
nil, pt1 ==
nil)
//true false
可比較。
如果兩個通道是由同乙個make建立的,或者兩個通道值都為nil,那麼它們是相等的。
ch1 :=
make
(chan
int)
ch2 :=
make
(chan
int)
var ch3 chan
int ch3 = ch1
var ch4 chan
intvar ch5 chan
intvar ch6 chan
string
//同乙個make建立的通道才相等
//輸出:false true
fmt.
printf
("%v %v\n"
, ch1 == ch2, ch3 == ch1)
//通道值可與nil比較
//輸出:true true
fmt.
printf
("%v %v\n"
, ch4 == ch5, ch5 == ch1)
//兩個不同型別的通道,即使都是空值,也不能比較
//invalid operation: ch5 == ch6 (mismatched types chan int and chan string)
fmt.
printf
("%v\n"
, ch5 == ch6)
可比較。
介面值是乙個兩個字長度的資料結構,如下圖所示。第乙個字包含乙個指向內部表的指標。這個內部表叫作itable,包含了已儲存的值的型別資訊(動態型別)以及與這個值相關聯的一組方法。第二個字是乙個指向所儲存值(動態值)的指標。
如果兩個介面值的動態值和動態型別都相等,或者兩個介面值都為nil,那麼它們是相等的。介面值可以與nil進行比較。
type speaker inte***ce
type person struct
func
(p person)
speak()
type student struct
func
(s student)
speak()
func
main()
p2 := person
p3 := person
s1 := student
fmt.
printf
("%v %v %v %v\n"
,speaker
(p1)
== p2,
speaker
(p1)
==speaker
(p3)
,speaker
(p1)
==speaker
(s1)
,speaker
(s1)
==nil,)
}
如果非介面的型別x的值x與介面型別t的值t滿足:
x本身是可比型別
x實現了t
則兩者的值可以進行比較。如果t的動態型別是x,t動態值與x相同,則t和x相等。
type speaker inte***ce
type person struct
func
(p person)
speak()
type student struct
func
(s student)
speak()
func
main()
p2 := person
p3 := person
s1 := student
//輸出:true false false
fmt.
printf
("%v %v %v\n"
,speaker
(p1)
== p2,
speaker
(p1)
== p3,
speaker
(p1)
== s1,
)}
不可比。只能與nil比較
不可比。只能與nil比較
不可比。只能與nil比較
如果struct中所有的字段都是可比較的,那麼兩個struct是可比較的。如果struct對應的非空白字段相等,則它們相等。struct不能與nil比較。
type person struct
p1 := person
p2 := person
p3 := person
//輸出:false true
fmt.
printf
("%v %v\n"
, p1 == p2, p1 == p3)
var p4 person
var p5 person
//輸出:true
fmt.
printf
("%v\n"
, p4 == p5)
如果陣列中的元素型別是可比的,則陣列也是可比較的。如果陣列中對應的元素都相等,那麼兩個陣列是相等的。陣列不能與nil比較
a1 :=[3
]int
a2 :=[3
]int
a3 :=[3
]int
//元素順序必須一樣
//輸出:true false
fmt.
printf
("%v %v\n"
, a1 == a2, a2 == a3)
//invalid operation: a3 == nil (mismatched types [3]int and nil)
fmt.
printf
("%v\n"
, a3 ==
nil)
go學習筆記 4 比較兩個型別相等
字串比較方法 1 逐個比較且不分大小寫,相等返回true,不相等返回false fmt.println 你好 你好 true fmt.println sa sa true fmt.println sa sa false 2 strings.equalfold 區分utf 8字元在忽略大小寫的情況下是...
java中整數的相等比較
如果比較兩個數值相等的integer型別的整數,你可能會發現,用 比較 首先你必須明確 比較的是位址 有的時候返回true,而有的時候,返回false。比如 integer i 128 integer j 128 system.out.println i j 返回false 而integer m 1...
如果比較表中同型別多列值是否相等?
keylife富翁筆記 作者 hongyuan 標題 如果比較表中同型別多列值是否相等?關鍵字 ttxxhhg 分類 個人專區 密級 公開 評分 回覆 0,閱讀 507 原理 將多列合成一列,分組,如果比較一列 group by 行唯一標識 haing 列數量 table1 a1 a2 a3 a4 ...