摘要
本文介绍了Go语言中字符串的特点,与java中的string进行了对比,最后介绍了Go中String与其他基本类型常用的相互转换方式。
1、go字符串概述
定义
字符串string在go中同样被定义为基本数据类型,类型关键字为string,其本质就是一个不能修改的字符数组。其常用定义方式有两种:
var str string = "hello"
str := "hello"
本质
go语言中string类型的本质与一个指向字符数组的切片类似,该类型大小固定为16个字节,其中8个字节表示一个指向字符数组的指针,另外8个字节表示字符串长度。可以验证如下:
var str1 string = "hello"
fmt.Printf("str1的类型是%T,\"%s\"变量本身占用%d个字节,字符串长度为%d\n", str1, str1, unsafe.Sizeof(str1), len(str1))
str2 := "hello撒大"
fmt.Printf("str2的类型是%T,\"%s\"变量本身占用%d个字节,字符串长度为%d\n", str2, str2, unsafe.Sizeof(str2), len(str2))
******结果*******
str1的类型是string,"hello"变量本身占用16个字节,字符串长度为5
str2的类型是string,"hello撒大"变量本身占用16个字节,字符串长度为11
2、与java的String异同之处
不同之处
- 1、java中String是对象,而go中string是基本数据类型
- 2、java中String对象不能通过数组方式直接索引每个字符,但golang可以,如:
str := "123"
fmt.Println(str[1])
*****输出*****
50 //go中字符byte默认通过无符号整形输出
相似之处
- java和go中的字符串都是满足不可变特性的
- java的不可变性体现在:用户不能通过对象引用直接修改对象本身,而通过jdk提供的方法如subString()等会返回新的对象,不会修改到对象本身。
- go的不可变性体现在:其不允许用户通过数组索引方式修改其指向的字符串数组,从而保证不可变性。
3、使用的注意事项
- 1、go中字符串类似于切片,因此也可以通过其衍生出更多的切片,但所有切片都不能修改字符数组,如案例ÿ