Java中的String浅析
来源:互联网 发布:将军在上 原著 知乎 编辑:程序博客网 时间:2024/05/30 05:23
Java的String类型的存储有两种情况 ,存储在字符串池pool中或者是存储在堆heap中,下面就几种不同的字符串的创建方式来进行分析;
字符串的创建方式有以下几种:
1、String str = new String();
2、String str = "abc";
3、String str = new String("abc");
4、String str = "ab"+"c";
5、String a = "a";
6、int a = 10;
这三种情况下,同样是建立字符串但是他们的含义是不同,依次来看一下吧,
1、String str = new String();这种情况下:建立字符串的过程是在程序运行的时候才能生成的这样的话,生成的字符串是在存储在heap中,而且在生成内容一样的时候也不会进行优化而是从新生成一个字符串对象。
例如:String str1 = new String("abc"); String str2 = new String("abc");及时这样的情况的话依然生成的还是两个字符串,通过str1 == str2进行判断返回
2、String str = "abc";这种情况下,字符串生成的过程是在程序编译的时候进行的,生成以后存储在pool中最终成为常量池的一部分。这种情况下当生成字符的时候会首先去pool中检索,如果找到同样的字符串的内容的时候会直接将变量指向那个内容,没有的话就在pool中建立新的字符串并指向这里,因此String s1 = "as";String s2 = "as";
3、String str = new String("abc");这种情况相当于是前两种情况的结合体这个创建过程是首先字pool中检索如果有"abc"这个字符串的话那么直接将这个字符串复制到heap中然后如果pool中的这个字符串没有被引用的话就被垃圾回收机制回收,否则的话就不回收,如果pool中没有的话那么就在pool中建立建立这样的字符串,然后就在pool中建立这样的一个字符串中然后再复制到heap中,最后如果pool的这个字符串没有被引用的话就会被垃圾回收机制回收,否则不回首。不推荐使用这种方式因为这种方式的话首先来说效率低下其次的话还有可能导致内存泄露的情况。
4、String str = "ab"+"c";这种情况下生成字符串的过的过程是在程序编译的是时候生成的因此生成的字符串是在pool中的。
5、String a = "a"; String str = a + "bc";这种情况下看起来和4很像但是处理原理却完全不同,因为a是一个变量因此字符串str生成的过程只能在程序运行的时候进行,因此最终str字符串是存储在heap中的;
6、int a = 10; String str = a + "abc"; 这个和5是相似的唯一不同的就是在运行过程中涉及到了一个类型升级的问题整形a在和字符串相加的时候自动升级成了字符串类型。
- 浅析java中的String
- Java中的String浅析
- java String浅析
- Java String浅析
- Java String 源码浅析
- Java String 源码浅析
- Java String类浅析
- 【java基础】浅析String
- 浅析C#中的string字符串
- Java String 源码浅析【byGavin】
- JAVA String.split() 方法浅析
- java String类原理浅析
- Java学习札记13:浅析Java中的String、StringBuffer和StringBuilder的区别
- 浅析 Java 中的覆盖
- 浅析Java中的Logger
- 浅析Java中的XML
- 浅析Java中的Thread
- 浅析Java中的阻塞
- C语言的6个位运算符
- 对于html页面历史记录的控制
- 天伦歌
- Java8 Stream语法详解
- LeetCode笔记:374. Guess Number Higher or Lower
- Java中的String浅析
- Android生成指定多少位的随机数
- IAR和KEIL中以常量形式存储到ROM或FLASH的指定的位置
- 388. Longest Absolute File Path
- 带loading指示器的js按钮动画特效
- RecyclerView悬浮条
- 日常工具总结
- [贪心] 2016 计蒜之道 初赛 第一场 A. 青云的服务器密钥
- LeetCOde No.69 Sqrt(x)