博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Scala Symbol笔记
阅读量:6274 次
发布时间:2019-06-22

本文共 1310 字,大约阅读时间需要 4 分钟。

Symbol

This class provides a simple way to get unique objects for equal strings. Since symbols are interned, they can be compared using reference equality.

symbols可以作为一种快速比较字符串的方式,如果字符串的值相同,则返回的symbol变量具有相同的引用地址。Symbol内部维护了一个字符串池。

object SymbolDemo {  def main(args: Array[String]): Unit = {    val s = 'nihao    val n = 'nihao    // return true    println(s == n)  }}

Compare to Java

在Java中创建String实例有两种方式:

1、直接给一个变量赋值;
2、用new关键创建String对象;(下文记作:方式1 和 方式2)

方式1

我们都知道 “方式1” 每次都会创建一个新变量(所以for循环内拼接字符串不建议用 “+” 操作符,因为每次都会开辟一个新的内存)。但Java其实对该操作做了优化,在String类内部维护了一个字符串池,每次通过 “方式1” 创建String实例时,首先检查字符串池中有没有相同的字符串,如果字符串池中不存在该字符串,则将字符串放入字符串池中(此处开辟新内存),同时将字符串的引用地址赋值给变量;如果字符串池中存在该字符串,则直接将原有引用地址赋值给新变量。

当创建 “str1” 时,字符串池中没有 “Hello Str”,此时将 “Hello Str” 放入字符串池中,并将内存地址赋值给 “str1”。当创建 “str2”时,字符串池中已经存在 “Hello Str”,直接将原有内存地址赋值给 “str2”,所以 “str1 == str2” 返回 true 。

方式2

每次都会创建一个新的对象,当调用 intern() 时逻辑过程跟 “方式1” 相同。当字符串池中存在 “Hello Str”时直接返回内存地址,否则将 “Hello Str” 放入字符串池中,并返回内存地址。

public class Demo {  public static void main(String[] args) {    String str1 = "Hello Str";    String str2 = "Hello Str";    String str3 = new String("Hello Str");    // return true    System.out.println(str1 == str2);    // return false    System.out.println(str1 == str3);    // return true    System.out.println(str1 == str3.intern());  }}

Refer from:

转载地址:http://wkmpa.baihongyu.com/

你可能感兴趣的文章
RedHat Linux卸载rpm包遇到error: specifies multiple packages
查看>>
centos6.4 http dhcp nfs pxe kickstart 自动化安装系统
查看>>
漫游配置文件
查看>>
数据的存储介质-固态存储SSD
查看>>
oracle PL/SQL 流程控制
查看>>
Linux下/proc目录简介
查看>>
jenkins自动同步配置文件
查看>>
Windows系统清理 只需做到五大方面
查看>>
我的友情链接
查看>>
sql server 2005 (select查询语句用法)
查看>>
Spring整合Hibernate(1)
查看>>
3月7日作业
查看>>
python学习笔记(五)
查看>>
hebernate template 分页查询
查看>>
python开发之路SocketServer
查看>>
ARP Changes in Server 2008/Vista
查看>>
Linux主机安全笔记
查看>>
java 发送get和post请求
查看>>
动态加载JS,并执行回调函数
查看>>
go语言使用go-sciter创建桌面应用(七) view对象常用方法,文件选择,窗口弹出,请求...
查看>>