String是被final修饰的,是不可变对象,那么这句什么意思呢。在学习scala时候var,val时候,就想到这个问题,所以记录下

看案例:

package com.cxy;

import sun.applet.Main;

import java.lang.reflect.Field;

public class StringDemo {
public static void main(String[] args) throws Exception{
String a ="aaa";
System.out.println("第一次打印");
System.out.println(a); a ="bbbbbb";
System.out.println("第二次打印");
System.out.println(a);
Field value = null ;
try {
value = a.getClass().getDeclaredField("value");
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
value.setAccessible(true);
char[] o = (char[])value.get(a);
o[]='';
System.out.println("第三次打印");
System.out.println(a); }
}

看执行结果:

同样三次打印为什么打印的还是不同值呢,String是被final修饰的,不可变,到底有没有错呢,显然是没有错的

那么这句话是什么意思呢,

  意思这样的,String修饰的变量,是a,那么执行的地址是那个,等号左边为引用,那么右边地址,

  所以String s =”aaaaa“时,指向的是字符串中aaaaa的地址值,那么字符串创建出来之后,是无法修改的,所以说String变量是无法修改的,是无法修改”aaaaa“这个值

  其实也不是无法修改的,只是 没有给我们提供修改字符串的方法,看如下图

所以,可以通过反射来操作。修改之后,会重新创建一个字符常量,并不是把原来的删除

最新文章

  1. #ifndef
  2. python3读取chrome浏览器cookies
  3. 手机数据抓包以及wireshark技巧
  4. java JDK8 学习笔记——第11章 线程和并行API
  5. 微信小店 API 手册
  6. Spring源代码解析(收藏)
  7. Java String.indexOf() 函数用法小结
  8. 20个很有用的CSS技巧
  9. 开源免费的.NET图像即时处理的组件ImageProcessor
  10. 2017-4-26 winform 菜单和工具栏
  11. Python爬虫从入门到放弃(十九)之 Scrapy爬取所有知乎用户信息(下)
  12. BZOJ 2179 [快速傅里叶变换 高精度乘法]
  13. YOLO学习
  14. java中equals,hashcode和==的区别
  15. mpdf中文开发使用文档附demo实例
  16. 2019.02.27 bzoj4556: [Tjoi2016&Heoi2016]字符串(二分答案+sam+线段树合并)
  17. 【Quartz】1、Quartz使用说明
  18. SVN上传下载项目
  19. git 标签管理
  20. 为tomcat指定jdk

热门文章

  1. 计算机基础之编程 + 基本组成 + 组成补充 + 操作系统(day01整理)
  2. springcloud之Feign、ribbon设置超时时间和重试机制的总结
  3. 大家都说好用的 Python 命令行库:click
  4. (Java) byte[] 和 base64 字符串之间的转换
  5. Flask:Flask的模板系统和静态文件
  6. Flask:项目的准备工作
  7. if __name__ == "__main__" 的作用
  8. JAVA GUI 事件监听事件 详解 和 案例.
  9. javaScipt类定义和实现
  10. STL库学习笔记(一)——什么是STL?