String的那些事

软件发布|下载排行|最新软件

当前位置:首页IT学院IT技术

String的那些事

samsaraaa   2020-03-17 我要评论
[toc] # String的特点? 通过查看String类的源码我们得知:String类被final关键字修饰,这即是说明String类的特点就是:字符串对象一旦被初始化就不会被改变。注意:此处是字符串对象而不是字符串引用。也即是说: ```key String s = "abc"; // s引用变量指向了值为"abc"的对象 s = "cba"; // s引用变量又指向了值为"cba"的对象,但是上面值为"abc"的对象的值并未改变 ``` 那么String类被final修饰有什么好处呢?第一个好处是安全,因为final保证不管怎样操作,它的值都是不变的;第二个好处就是高效,因为只有String类是不可变类时,我们才能实现字符串常量池。试想如果String类是可变类,当多个字符串引用变量指向同一个字符串对象时,字符串对象改变后就会引起多个字符串引用变量内容的改变,这显然不符合我们的预期。我们可以通过下面的代码来验证字符串常量池的存在: ```key class Demo { public static void main(String[] args) { String s1 = "abc"; String s2 = "abc"; Demo d1 = new Demo(); Demo d2 = new Demo(); System.out.println(s1 == s2); // 1 System.out.println(d1 == d2); } } ``` 我们知道:如果是两个引用变量使用"=="进行比较,那么比较的是两个对象的地址值,1处的代码输出结果为"true",说明s1引用变量和s2引用变量指向的是同一个对象,也就验证了字符串常量池的存在。字符串常量池其实就是字符串的一个缓冲区,而"缓存"可以提高系统性能,那么即是说字符串常量池的使用可以提高系统性能。常量池的特点就在于:如果池中没有则创建,如果池中有就直接使用池中的。 String内部实际存储结构为char数组。下面为jdk1.8版本的String源码: ```key public final class String implements java.io.Serializable, Comparable

Copyright 2022 版权所有 软件发布 访问手机版

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 联系我们