返回信息流String a="abc";
Field valueFieldString=String.class.getDeclaredField("value");
valueFieldString.setAccessible(true);
char[]value=(char[])valueFieldString.get(a);
value[2]='@';
String b="abc";
System.out.println(a==b);
System.out.println("abc"==b);
System.out.println(a);
System.out.println(b);
System.out.println("ab@"==a);
true
true
ab@
ab@
false
这是一条镜像帖。来源:北邮人论坛 / java / #44931同步于 2015/10/24
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
谁说String不可变的?
cuter
2015/10/24镜像同步12 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
点开string源码就有了。。。sincejdk1.0
文档上不知道说没说
【 在 nuanyangyang 的大作中提到: 】
: 这……好吧,恭喜。
: 不过可以说说你用的是哪个jvm吗?java api并没有说string里有value这个字段。
oracle的jdk?
【 在 cuter 的大作中提到: 】
: 点开string源码就有了。。。sincejdk1.0
: 文档上不知道说没说
有是肯定有的...String and StringBuffer都是用char[]存储的
不过是定长
【 在 nuanyangyang (暖羊羊) 的大作中提到: 】
: 这……好吧,恭喜。
: 不过可以说说你用的是哪个jvm吗?java api并没有说string里有value这个字段。
【 在 icyfox 的大作中提到: 】
: 有是肯定有的...String and StringBuffer都是用char[]存储的
: 不过是定长
:
我的意思是,这是实现String类的一种方法,但不是唯一的。比如,可以完全用C和JNI实现逻辑,然后String用一个long来保存本地指针。但这样,好像失去了很多垃圾回收带来的好处。
暖神,话说怎么获取到指针的啊?能获取实际的内存地址吗?
【 在 nuanyangyang 的大作中提到: 】
:
: 我的意思是,这是实现String类的一种方法,但不是唯一的。比如,可以完全用C和JNI实现逻辑,然后String用一个long来保存本地指针。但这样,好像失去了很多垃圾回收带来的好处。
是是是...
【 在 nuanyangyang (暖羊羊) 的大作中提到: 】
: 我的意思是,这是实现String类的一种方法,但不是唯一的。比如,可以完全用C和JNI实现逻辑,然后String用一个long来保存本地指针。但这样,好像失去了很多垃圾回收带来的好处。
【 在 cuter 的大作中提到: 】
: 暖神,话说怎么获取到指针的啊?能获取实际的内存地址吗?
是说指向java对象的指针么?这……说来话长,java的对象可能会被GC移动,也可能在内存里有多个备份,也有可能根本不在内存里。所以……你懂的。
其实C也没说指针就是地址,但大多数人用地址来实现指针。