美文网首页
1.01.字符串,常量字符串,构造器

1.01.字符串,常量字符串,构造器

作者: RockyLuo_290f | 来源:发表于2019-01-03 13:41 被阅读0次
在定义 String str = "abc"; 

首先会到数据共享区中查找是否存在"abc",

存在,指向

如果不存在,创建

并不会像堆一样,在使用完后,被立即回收

构造器:

1.字节数组

byte [] bs = {97,101,98,110,99,103};

String str = new String(bs)

2.字符数组

char [] cs = {'a','e','c','r','k'};

String str = new String(cs)

区别:

//创建常量的字符串
String a = "abc";

//创建字符串的对象
String b = new String("abc");


//判断1
System.out.println(a == b);

//false,比较的是内存地址,一个是对象的地址,一个是常量字符串的地址
//String a 是在数据共享区创建的一个对象
//String b 是在堆中创建的字符串的对象,并指向数据共享区的

//判断2
System.out.println(a.equals(b));
//true比较的是内容

Untitled.png
String c = "hello";
String d = "hello";

System.out.println(c == d);
//true,数据共享区中的内存地址一致
String e = "hello";
String f = "world";
String g = "helloworld";
System.out.println( g == ( e + f ));

//

String + 是通过StringBuilder.toString()的方法生成的

    public String toString() {
        // Create a copy, don't share the array
        return new String(value, 0, count);
    }

通过查看StringBuilder的toString()的方法,可以看到这里是通过new关键字来生成一个String对象,所以b指向的应该是堆中的字符对象。至于这个堆中的字符串对象和常量池中的字面量的关系,暂时还不太清楚。可能是通过clone的方式,在堆中新生成了一个字符串对象实现的。

Tip:
代码中的字符串拼接符号 +

会被编译器重载为StringBuilder的append()方法以提高性能

对于那些在编译时就能确定的字面量都会存放在运行时常量池中,比如:

String c = "hello " + "world"; //JVM会将此代码优化为String c = "hello world";
String b = a + "world";

其中a是变量,在编译时不能确定值,所以不会被放在运行时常量池中,而是在heap中重新new了一块儿内存。

相关文章

  • 1.01.字符串,常量字符串,构造器

    构造器: 1.字节数组 2.字符数组 区别: String + 是通过StringBuilder.toString...

  • Chapter 11 . 常用类

    阅读原文 Chapter 11 . 常用类 11.1字符串相关类 String类:构造字符串对象 常量对象:字符串...

  • iOS 不可变字符串NSString的使用

    字符初始化 1.创建一个不可变字符串str1 值是常量字符串 2.用字符串创建字符串 构造 3.用字符串的格式化...

  • String内存分析

    1、了解常量池 字符串常量池中存储的就是各种字符串,在常量池中这些字符串都是唯一的。字符串常量池中存储的是在编译期...

  • Swift 4.0 字符串(String)学习

    定义字符串常量(常量只有读操作) 定义字符串变量 赋值 字符串分割 字符串截取 1、string.startInd...

  • Java中的常量池

    Java中的常量池分为三类:字符串常量池、class常量池、运行时常量池 字符串常量池 从1.7及其之后,字符串常...

  • String:字符串常量池

    一、设计思想   为字符串开辟一个字符串常量池,创建字符串常量时,首先检测字符串常量池是否存在该字符串。如存在该字...

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

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

  • C primer Plus study note chapter

    字符串是由空字符结尾的char类型数组字符串常量:双引号括起来的内容称为字符串常量。字符串常量属于静态存储类别,就...

  • String的最大长度

    create at 20211016,modify at 常量池中的字符串 这样定义的字符串会存入常量池,字符串最...

网友评论

      本文标题:1.01.字符串,常量字符串,构造器

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