JAVA中的String
来源:互联网 发布:剑三萌萝莉脸型数据 编辑:程序博客网 时间:2024/06/05 19:20
简单而言,java中的直接用字符串初始化的Spring是指向常量池的。而常量池中的内容是不可改变的。
public class Sandbox4 extends Sandbox2{ String s1 = "test1"; public static void main(String[] args) { Sandbox4 a= new Sandbox4(); a.ChangeString(a.s1); System.out.print(a.s1); } void ChangeString(String s){ s = "test2"; }}
如果你强行要改变他的值。JVM回在常量池中新生成一个对象。而java中都是穿值的。上面的程序中进入方法的s是一个引用。方法改变了引用的值,而不是引用所指向对象的值。所以程序的释出仍然是test1。即使你采用new String的方法声明s1也结果不会改变的。JAVA API中已经明确说了Spring中的内容不能改变。只能新建一个对象替换。
另外的一点是,当你使用字符串给String赋值时,有可能新生成一个对象(比如说上面的例子)。也有可能不新生成一个对象,而是指向常量池中已经存在的对象。
public class Sandbox4 extends Sandbox2{ String s1 = "test1"; public static void main(String[] args) { Sandbox4 a= new Sandbox4(); String s2 = "test1"; System.out.print("s1==s2:"+(a.s1==s2)); } }
但是,如果将上述换成new String的方法来定义引用,则是两个不同的对象(虽说也不知道有啥意义)。
如果你想生成一个非常量的String。请使用StringBuffer类。
这里还要牵扯一个问题。就是final。
当书写final Object obj类似的定义时,obj指向的对象并不是不可以变的!而只是obj指向的对象不能变成别的对象。所以跟上面说的情况不同。不能说String是默认final修饰的。这是两回事。
java中的==是比较他们的内存地址。object中的equals就是用==实现的。当然可以重写。hashcode是用来均匀映射的。理论上hashcode相等不代表什么。
但是,在hashmap等的实现中这样却不行。事实上,我们在不能允许两个equals相等的对象hashcode不同。所以,如果你重写了equals方法,而且会用到集合框架。请重写hashcode。你重写的equals方法一般是要求两个对象中部分或者全部字段相等。显然,用这些字段计算hashcode就好啦。
- Java中的String数据类型
- Java中的String数据类型
- java中的String池
- java 中的比较String
- JAVA中的String函数
- java中的String
- java 中的String
- java中的String
- 揭秘Java中的String
- JAVA中的String剖析
- Java中的String
- Java中的String
- Java中的String数据类型
- Java中的String
- Java中的String
- java中的String
- java中的String类型
- java中的String... args
- MySql(18)------mysql触发器的使用
- 前序 中序 后序遍历 转换
- Vijos P1098 合唱队形(动态规划,双重LIS)
- Shader Forge中文帮助手册
- 语句include和require的区别
- JAVA中的String
- C# 日期格式化 补零
- Node.Js fs模块文件夹操作
- 数据处理可视化技术D3.JS--JavaScript常识
- mysql5.7多实例安装
- qt-qml移动开发之在ios上开发和部署app流程简介
- 数据结构实验之查找二:平衡二叉树
- QPalette~~控件颜色面板类QPalette
- 清除本地DNS