func main() {
a := []byte("Hello 世界")
count := 0
for _, v := range a {
if v == ' ' {
count++
}
}
fmt.Println(count)
}
这个demo是正确输出结果1的,但是我不理解的是 if v == ' '
这一行。v是个byte类型而' '是个rune,二者怎么能直接比较呢?
func main() {
a := []byte("Hello 世界")
count := 0
for _, v := range a {
if v == ' ' {
count++
}
}
fmt.Println(count)
}
这个demo是正确输出结果1的,但是我不理解的是 if v == ' '
这一行。v是个byte类型而' '是个rune,二者怎么能直接比较呢?
https://golang.org/ref/spec#C...
没有指定类型的数值常量其类型由上下文决定
func fn1(x int) int { return x + 1}
func fn2(x uint8) uint8 { return x}
fn1(' ')
fn2(' ')
byte,占用1个字节,即8 个比特位,它和 uint8 类型本质上没有区别,它表示的是 ACSII 表中的一个字符
变量 a 里的空格ASCII是 32,而 ' ' 的ASCII也是 32,所以是相等的,你可以打印一下 byte 类型的空字符串和 ' '看下就知道了
7 回答5.3k 阅读
6 回答6.8k 阅读✓ 已解决
4 回答2.3k 阅读
1 回答3.3k 阅读
2 回答881 阅读✓ 已解决
2 回答2.2k 阅读
1 回答2.1k 阅读
rune
就是int32
,byte
就是int8
。整数类型在编译期间有隐式转换。