博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
为什么字符串String是不可变字符串&&"".equals(str)与str.equals("")的区别
阅读量:6207 次
发布时间:2019-06-21

本文共 913 字,大约阅读时间需要 3 分钟。

为什么字符串String是不可变字符串

实际上String类的实现是char类型的数组

虽然说源码中设置的是private final char[] value;

final关键词表示不可变动

但是只是不能直接在value这个数组的引用地址入手

还是可以在数组value中进行更改

像是value[2] = 1;

但是设计者巧妙地避开了这个坑

还把数组设为final

public static void main(String[] args) {  final char[] value = {1,2,3,4};  char[] v = new char[4];  value = v;}
public static void main(String[] args) {    final char[] value = {1,2,3,4};    value[2] = 6;    System.out.println(value);}

虽然字符串本身不能改

但是可以改字符串变量指向另一个字符串的地址

而且字符串是有一个共享的字符串常量池(这里等我读《深入Java虚拟机》之后再填坑)

所以如果复制一个字符串变量

原始字符串与复制的字符串共享相同的字符

其实也是因为java的特性之一------没有可以直接改变内存变量的指针

 

 

 

"".equals(str)与str.equals("")的区别

"".equals(str)这种写法可以规避系统报空指针异常错误

1 class Solution {2   private static String a;3   public static void main(String[] args) {4     if("".equals(a))5       System.out.println("''.equals(a)");6     if(a.equals(""))7       System.out.println("a.equals('')");8   }9 }

 

转载于:https://www.cnblogs.com/NYfor2018/p/8907198.html

你可能感兴趣的文章
Google API设计指南-资源名称
查看>>
最全React技术栈技术资料汇总(收藏)
查看>>
【工具使用系列】关于 MATLAB 遗传算法与直接搜索工具箱,你需要知道的事
查看>>
Kali-linux Arpspoof工具
查看>>
PDF文档页面如何重新排版?
查看>>
基于http协议使用protobuf进行前后端交互
查看>>
UML设计一个电影票务销售系统(四)
查看>>
AlphaGo Zero用它来调参?【高斯过程】到底有何过人之处?
查看>>
Linux平台Oracle多个实例启动说明
查看>>
bash腳本編程之三 条件判断及算数运算
查看>>
php cookie
查看>>
linux下redis安装
查看>>
Sqlserver表值函数
查看>>
弃 Java 而使用 Kotlin 的你后悔了吗?| kotlin将会是最好的开发语言
查看>>
JavaScript 数据类型
查看>>
量子通信和大数据最有市场突破前景
查看>>
StringBuilder用法小结
查看>>
UVa 10252-Common Permutation
查看>>
CSS - 修改input - placeholder 和 readonly 的样式
查看>>
Revel运行APP出现的路径问题
查看>>