美文网首页
字符串常量的初始化

字符串常量的初始化

作者: Kevin_Huang54 | 来源:发表于2019-02-12 16:23 被阅读0次

一、使用直接量赋值
当执行String str = "abc"时,先在Java的String常量池中创建一个"abc"对象,然后在变量栈中创建str变量,并指向该对象。
当执行String str2 = "abc"时,str2会指向这个已经存在的对象,这是一种节省资源的做法。
无论调用多少次,内存中都只有一个"abc"对象,str和str2都被确认为字符串常量,这种现象称为“字符串驻留”,这个过程在编译时就确定了。

二、使用new String
第一次调用String str = new String("abc")时,首先在String池中创建一个"abc"对象,编译时无法确定str的值。
执行时,因为调用了new,就会在堆内存中新建一个对象,因此会在堆内存中新建一个String对象。
所以以下代码返回false:

String str = "abc";
String str2 = new String("abc");
System.out.println(str == str2);

三、使用变量+直接量
考察以下代码:

String s = "jj";
String s2 = "j";
String s3 = s + s2;
String s4 = "jjj";
System.out.println(s3 == s4); 
\\返回false

字符串驻留发生在编译过程,而语句String s3 = s + s2在编译时不能确认s3是否存在于String池,因此s3在编译结束后仍是一个字符串变量。
上述代码在执行时会创建一个StringBuffer对象,对s和s2进行拼接,因此也相当于在堆内存中new了一个新对象。

相关文章

  • 【JVM】JVM存放字符串的位置

    字符串存放的位置有两个:字符串常量池和堆内存。 使用常量字符串初始化的字符串对象,它的值存放在字符串常量池中; 使...

  • swift字符串

    字符Character组成字符串 声明一个字符串常量let str = "这是一个常量字符串" 可以初始化空的字符...

  • Swift-字符串和字符(一)

    字符串字面量 字符串字面量可以用于为常量和变量提供初始值: 注意someString常量通过字符串字面量进行初始化...

  • 面试官:字符串对象在JVM中是如何存放的

    典型答案 字符串对象在JVM中可能有两个存放的位置:字符串常量池或堆内存。 使用常量字符串初始化的字符串对象,它的...

  • C语言 测试

    数组和指针都可以在定义中用字符串初始化; char a[] = "abcd"; //字符串常量初始化的数组是可以修...

  • 七、字符串处理 @GeekBand

    NSString Unicode编码 初始化方法 字符串常量初始化 初始化器 工厂方法 恒定性,创建后不能改变,任...

  • 1 java常用类,枚举和注解

    String 中通过字面量来初始化的时候,都会将值存储到常量池中,常量池是不会存储相同内容字符串的,当对字符串引用...

  • 再读 Golang 圣经

    收获还是不小 字符串 code 可以去 unicode.org 查询 常量 高精度常量 切片初始化 你一定想用 ...

  • 第四章、字符串

    4.1字符串的初始化 4.1.1字符串种类 let常量名=字符串字面量 var变量名:String=字符串字面量 ...

  • iOS开发,搞定NSString

    一、初始化方法 1、创建常量字符串 2、创建一个空字符串,并赋值 3、initWithCString方法 4、创建...

网友评论

      本文标题:字符串常量的初始化

      本文链接:https://www.haomeiwen.com/subject/pflkeqtx.html