JAVA中令人疑惑的字符串
2024-10-19 04:22:44
Java中不同的字符串存在于同一个存储池中,字符串变量将指向存储池中相应的位置,也就是字符串变量里面包含的并不是字符串而是这个字符串对象的内存地址。
String a = "123";
a是一个字符串对象变量,"123"是一个字符串对象,a里面存储的并不是"123"这个字符串对象,a存储的是这个对象的内存地址。
String b = "123";
同理,b也是一个字符串对象变量,但是当字符串池中含有这个字符串对象时,就不会新建一个字符串对象,而是将已有的字符串对象的内存地址赋给b,所有a==b为true 。
当然字符串的比较是用equals()方法,用==是比较两个字符串的内存地址,所以比较字符串时是使用equals()方法。
String a = "123";
a = "456";
这样String看起来更像一种基本数据类型了,其实并不是改变了a的值,而是将a中的"123"的内存地址改为"456"的内存地址。String类的对象(也就是字符串)不可更改。
String a = "123"+"456";
Java中可以使用+号进行字符串拼接,这样虽然看起来像是两个基本数据类型再相加,实际上是Java对这个+号进行了运算符重载,但是令人疑惑的是,Java为什么不为字符串也重载== 。
最新文章
- jquery插件扩展的学习
- Latex 页面样式
- S盒
- 各硬件装置在 Linux 中的文件名(笔记)
- HTML之学习笔记(一)简介
- 重写TextView,实现圆形背景,文本居中显示
- Sql 字符串操作类COALESCE
- 2-13. 平均两个有序序列(25)(ZJU_PAT 名单 | 排列 )
- ONLY三行脚本 SQL数据恢复到指定时间点
- 共通css初次尝试
- 通过地址获得经纬度(百度Geocoding API)
- 移动端手势双击(MouseDown也可以在移动端响应,但是帧率太低)
- 虚拟环境更新HA
- Maven将远程包拉去到项目指定路径
- scrapy 通过FormRequest模拟登录再继续
- 在.NET开发中的单元测试工具之(2)——xUnit.Net
- 使用Angular cli创建组件报错: Unexpected token / in JSON at position....
- 【Py-Github】根据条件筛选Github repo的例子
- Android HttpURLConnection.connect找不到源 HttpURLConnection连接失败 HttpURLConnection.connect IO异常 解决办法
- 信息学奥赛(NOIP)复赛学习方法推荐