字符串String 池
来源:互联网 发布:r语言入门 知乎 编辑:程序博客网 时间:2024/06/01 10:18
来自i'am coder
public static void main(String[] args) throws IOException { String s1 = "a"; String s2 = "b"; String s3 = "ab"; String s4 = "ab"; System.out.println("s3==s4 -> "+ (s3==s4)); String s5 = "a"+"b"; System.out.println("s3==s5 -> "+ (s3==s5)); String s6 = s1+s2; System.out.println("s3==s6 -> "+ (s3==s6)); String s7 = new String("ab"); System.out.println("s3==s7 -> "+ (s3==s7)); final String s8 = "a" ; final String s9 = "b" ; String s10 = s8 + s9; System.out.println("s3==s10 -> "+ (s3==s10)); }
输出的结果为:
s3==s4 -> true s3==s5 -> true s3==s6 -> false s3==s7 -> false s3==s10 -> true
java中的字符串 :String类是不可变的(final),对String类的任何改变,都是返回一个新的String类对象。String 对象是 System.Char 对象的有序集合,用于表示字符串。String 对象的值是该有序集合的内容,并且该值是不可变的。
把String类的引用传递给一个方法,该方法对String的任何改变,对原引用指向的对象没有任何影响,这一点和基本数据类型相似。
String池 :String是不可改变的,为了提高效率Java引用了字符串池的概念,例如new String("abc");首先会在String池中创建一个对象“abc”,因为有NEW的存在所以会分配地址空间copy String池的内容。当出现的String对象在String池中不存在时即在String池中创建该对象。
s3、s4 -> 根据String的概念他们都指向了同一个缓冲池内的地址,所以结果为true。
s3、s5 -> 因为相加的两个为常量,所以编译器会把s5="a"+"b"优化为s5="ab",所以结果也为true。
s3、s6 -> 因为是两个变量的相加所以编译器无法优化,s1+s2即等同于(new StringBuilder(String.valueOf(s1))).append(s2).toString(); 在运行时,会有新的String地址空间的分配,而不是指向缓冲池中的“ab”。所以结果false。
s3、s7 -> 根据缓冲池的定义在new的时候实际会新分配地址空间,s7指向的是新分配的地址空间所以与缓冲池地址不同,所以为false。
s3、s10 -> 类似于s3与s5,因为是final类型编译器进行了优化所以相同。
- String字符串池
- String与字符串池
- 字符串String 池
- 关于String字符串池
- 字符串-String(二) 字符串常量池
- String和字符串常量池
- String.intern()-字符串常量池
- String.intern()-字符串常量池
- 字符串string
- string字符串
- String字符串
- String字符串
- String字符串
- 字符串String
- 字符串String
- 字符串String
- String 字符串
- 字符串String
- perf usage
- yarn学习心得 yarn上的程序开发
- Custom Component, Unreal Engine里定制组件
- UVa10978 - Let's Play Magic!(扑克类的游戏)
- 例子使用
- 字符串String 池
- CSS透明opacity和IE各版本透明度滤镜filter的最准确用法
- uC/OS-II 学习笔记:任务创建步骤
- 第一天-Java语言简介,环境搭建等
- 学拳录 24中盘 (07.29更新)
- 编程之美,3.11程序改错, 二分扩展
- 逆序输出
- 100个精彩的开源游戏
- OCP 1Z0 053 193