文档章节

基本类型和操作之理解Symbol类型

柳哥
 柳哥
发布于 2014/06/05 23:43
字数 549
阅读 653
收藏 2

相信很多人和我一样,在刚接触scala时,会觉得Symbol类型很奇怪,既然Scala中字符串都是不可变的,那么Symbol类型到底有什么作用呢?简单来说,相比较于String类型Symbol类型有两个比较明显的特点:节省内存和快速比较。在进入正题之前,让我们先来了解一下Java中String的intern()方法。


1. String的intern方法介绍
Oracle的开发文档上讲解的很详细:String类内部维护一个字符串池,当调用String的intern()方法时,如果字符串池中已经存在该字符串,则直接返回池中字符串引用,如果不存在,则将该字符串添加到池中,并返回该字符串对象的引用。执行过intern()方法的字符串,我们就说这个字符串被拘禁了(interned)默认情况下,代码中的字符串字面量和字符串常量值都是被拘禁的


2. Symbol类型的主要特点

a. 节省内存

在scala中,Symbol类型的对象是被拘禁的任意的同名符号字面量或者Symbol对象都指向同一个Symbol对象,避免了因冗余而造成的内存开销。例如:

注意:上例中,Symbol(“aSymbol”)表示的工厂方法调用(这个地方还有点不明白!!!!

b. 快速比较

由于Symbol类型的对象是被拘禁的,任意的同名符号字面量或Symbol对象都指向同一个Symbol对象,而不同名的符号字面量或Symbol对象一定指向不同的Symbol对象,所以Symbol对象之间可以使用操作符:== 快速地进行相等性比较而字符串的equals方法需要逐个字符比较两个字符串,执行时间取决于两个字符串的长度,速度很慢


3. Symbol类型的应用

Symbol类型一般用于快速比较,例如用于Map类型:Map<Symbol,Data>根据一个Symbol对象,可以快速查询相应的Data,而Map<String,Data>的查询效率则低很多。

© 著作权归作者所有

共有 人打赏支持
柳哥
粉丝 203
博文 405
码字总数 347782
作品 0
杭州
技术主管
用js来实现那些数据结构04(栈01-栈的实现)

  其实说到底,在js中栈更像是一种变种的数组,只是没有数组那么多的方法,也没有数组那么灵活。但是栈和队列这两种数据结构比数组更加的高效和可控。而在js中要想模拟栈,依据的主要形式也...

zaking
04/14
0
0
ES6 系列之模拟实现 Symbol 类型

前言 实际上,Symbol 的很多特性都无法模拟实现……所以先让我们回顾下有哪些特性,然后挑点能实现的……当然在看的过程中,你也可以思考这个特性是否能实现,如果可以实现,该如何实现。 回...

冴羽
06/12
0
0
理解和使用ES6中的Symbol

ES6中引入了一种新的基础数据类型:,不过很多开发者可能都不怎么了解它,或者觉得在实际的开发工作中并没有什么场景应用到它,那么今天我们来讲讲这个数据类型,并看看我们怎么来利用它来改...

一斤代码
07/11
0
0
低门槛彻底理解JavaScript中的深拷贝和浅拷贝

在说深拷贝与浅拷贝前,我们先看两个简单的案例: 按照常规思维,应该和一样,不会因为另外一个值的改变而改变,而这里的 却随着的改变而改变了。同样是变量,为什么表现不一样呢?这就要引入...

lunaqi
05/11
0
0
5分钟彻底理解Object.keys

编者按:本文作者 刘博文(Berwin),W3C性能工作组成员,360导航高级前端工程师。Vue.js早期用户,《深入浅出Vue.js》(正在出版)作者。github主页:https://github.com/berwin 前几天一个朋...

奇舞周刊
07/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring IOC 之 注册 BeanDefinition

获取 Document 对象后,会根据该对象和 Resource 资源对象调用 registerBeanDefinitions() 方法,开始注册 BeanDefinitions 首先调用 createBeanDefinitionDocumentReader() 方法实例化 Bean...

职业搬砖20年
6分钟前
0
0
Pycahrm左边出现一些bookmark的取消方法

pycharm 左边出一个对号或则一个0,放上去提示Bookmark 取消方法:按F11

鹏灬
9分钟前
0
0
JDK1.8使用Dubbo时需注意

Dubbo自带的很多包都比较旧了,其中的javassist在JDK1.8上运行会报错 而且错误通常比较诡异,javassist是编辑和创建Java字节码的类库,常见的错误会从spring中报出 解决办法: <dependency>...

火龙战士
11分钟前
0
0
Java 对Oracle数据库中的 BLOB类型 插入图片

package test;import java.io.BufferedInputStream;import java.io.FileInputStream;import java.io.PrintStream;import java.sql.Connection;import java.sql.DriverManager;......

青峰Jun19er
13分钟前
0
0
awk复习

10月22日任务 复习 awk调用外部变量 -v参数设置内部变量调用外部变量 [root@test awk]# a=44[root@test awk]# echo "ABCD" | awk -v GET_A=$a '{print GET_A}'44 更复杂的应用: [root@...

robertt15
21分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部