刚开始学习Ruby的时候,对于String 和 Symbol这两种类型有点疑惑,深入学习后记录他们这两者之间的区别。
1. 字符串和符号,都是Ruby中表示文本的方式
p "dog".to_sym #=> :dog
p :dog.to_s #=> "dog"
2. 相同的符号是一个对象,相同的字符并不一定是一个对象
p "dog".equal?("dog") #=> false
p :dog.equal?(:dog) #=> true
符号是不可变的,不能对符号进行修改。两个相同的符号一定是同一个对象。但是两个内容的字符串就不一定是同一个对象了。
3. 处理符号相比字符串,占用更少的资源 ,性能更优
因为字符串变量必须具有各种修改其内容的功能,所以字符串的维护和处理的开销就很大。但是有些时候,我们并不需要修改和处理创建的文本信息,这个时候就应该用符号,减少资源开销。