`
marlonyao
  • 浏览: 253230 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

令人抓狂的java程序,String可变!

    博客分类:
  • java
阅读更多

下面的程序会输出什么?

 

public class HelloWorld {

	public static void main(String[] args) {
		System.out.println("Hello World!");
	}

	private static java.lang.reflect.Field valueField;
	static {
		try {
			valueField = String.class.getDeclaredField("value");
			if (valueField != null) {
				valueField.setAccessible(true);
			}
			valueField.set("Hello World!", "Goodbye     ".toCharArray());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

 

如果你认为会输出"Hello World!",你就上当了!实际上该程序会输出"Goodbye   "。为什么?自己仔细考虑吧,我已经将程序简化得不能再简了,如果再在上面稍微做点变化估计就更困惑了。

 

 

原文其实在这里 ,解释在这里

 

 

 

分享到:
评论
3 楼 leeldy 2009-03-04  
相当神奇的反射。。。
现在还是扯不清楚。。。
2 楼 madbluesky 2009-03-04  
就是说用反射能改变一个string的值了。
1 楼 icyiwh 2009-03-04  
首先程序会运行static块,当运行到
valueField.set("Hello World!", "Goodbye     ".toCharArray());

时,程序会去Strings pools里面寻找"Hello World!"对象,没有发现,则创建一个对象,并且把"Hello World"的值改成 Good Bye!
当进入main()方法后,程序又去String pools里面找Hello World!对象,找着了,则直接返回,此时这个对象的值是Good Bye,那它输入当然就是Good Bye了

相关推荐

    数据结构——栈的实现

    理解栈的工作原理和应用场景对于任何IT专业人员来说都是至关重要的,无论是编写高效的算法,还是解决实际的编程问题,栈都是不可或缺的工具。通过实践和学习,你可以更深入地掌握这个基础而强大的数据结构。

    思考与抓狂的人物肢体语言PPT素材.rar

    本资源“思考与抓狂的人物肢体语言PPT素材.rar”正是一种为提升演示文稿吸引力和表达力而设计的专业素材。这个压缩包包含了三个不同情境的人物形象:一位抓狂的青年、一个摆姿势的老人以及一个深思的女士,这些都是...

    Alarmy「Sleep If U Can」Pro v4.61.07 for Android 「睡你妹闹钟」国际版,号称是世上最让人抓狂的闹钟!.rar

    Alarmy「Sleep If U Can」Pro v4.61.07 for Android 「睡你妹闹钟」国际版,号称是世上最让人抓狂的闹钟!

    编程语言中一些令人抓狂的规则

    众所周知,软件开发者每天都要做各种各样的决定:如何最好的实现功能、如何修复bug、如何提升应用程序的性能等等。但是他们同样是在别人的劳动成果下面继续做自己的决定的,比如说:他们使用的是别人开发出来的编程...

    Java游戏编程初步3.rar_Java游戏_java 游戏

    ”可能是一种幽默表达,暗示游戏编程可能会遇到一些让人抓狂的难题,但也鼓励读者坚持下去,因为克服这些困难将带来巨大的成就感。 标签“java游戏”和“java_游戏”强调了这是关于使用Java语言进行游戏开发的内容...

    详解关闭令人抓狂的ESlint 语法检测配置方法

    本文将详细介绍如何关闭或自定义这些令人抓狂的 ESLint 语法检测配置。 首先,关闭 ESLint 的一种简单方法是在项目中找到相应的配置文件。对于使用 vue-cli 脚手架创建的项目,通常在 `build/webpack.base.conf.js`...

    人工智能-项目实践-动作识别-基于JAVA的视频动作识别系统(Java).zip

    人工智能-项目实践-动作识别-基于JAVA的视频动作识别系统(Java 要运行该程序,必须将OpenCV目录下build/bin目录下的opencv_ffmpeg的dll文件 (有2个,一个是32位,另一个是64位,比如我的是64位的环境,opencv...

    [Oracle] 浅析令人抓狂的ORA-01555问题

    这个错误并不会对数据造成实际的丢失或破坏,但它会导致查询操作无法正常完成,从而影响应用程序的正常运行。本文将深入探讨ORA-01555错误的成因以及应对策略。 1. ORA-01555错误的产生 ORA-01555错误的根本原因是...

    三张抓狂思考的商务人士背景PPT素材下载.rar

    标题中的“三张抓狂思考的商务人士背景PPT素材下载.rar”表明这是一个关于PPT设计的资源包,其中包含了三张与商务人士思考、抓狂情绪相关的背景图像。这些图像通常用于制作演示文稿,以增强内容的表现力,帮助观众更...

    完美解决令人抓狂的zend studio 7代码提示(content Assist)速度慢的问题

    根据网络上google到的资料 ,更改了content Assist(7.1及之前版本为code Assist) ,... 您可能感兴趣的文章:解析在zend Farmework下如何创立一个FORM表单Zend 输出产生XML解析错误Zend Studio for Eclipse的java.lang.Nu

    微信小程序云商城源码(带php后端)

    还有就是bootstrap没有自带MessageBox很让人抓狂,于是就上了element-ui。说不准以后就让admin-lte与jQuery下岗了,让vue+ele全职来做吧。 最后就是2个工具,composer与bower,分别用来安装php与js库,有了这些包...

    JVM内存管理之JAVA语言的内存管理详解

    但是,这也引入了很多令人抓狂的内存溢出和泄露的问题。 内存划分是一个重要的概念,它是在程序运行时才有的数据存储区域。虚拟机规范中,将内存划分为六大部分,分别是PC寄存器、寄存器、JAVA虚拟机栈、虚拟机栈、...

    报名活动小程序

    还有就是bootstrap没有自带MessageBox很让人抓狂,于是就上了element-ui。说不准以后就让admin-lte与jQuery下岗了,让vue+ele全职来做吧。 最后就是2个工具,composer与bower,分别用来安装php与js库,有了这些包...

    头痛着急抓狂的商务人士小插图PPT模板

    头痛着急抓狂的商务人士PPT小插图素材下载,关键词:头痛、抓狂、着急,商务人士PPT背景图片,PPT素材下载,PPTX格式; 头痛着急抓狂的商务人士PPT小插图素材下载,关键词:头痛、抓狂、着急,商务人士PPT背景图片,...

    微信小程序-云商城(带php后端)

    还有就是bootstrap没有自带MessageBox很让人抓狂,于是就上了element-ui。说不准以后就让admin-lte与jQuery下岗了,让vue+ele全职来做吧。 最后就是2个工具,composer与bower,分别用来安装php与js库,有了这些包...

    基于Python的TensorFlow2.0的中文汉字手写体识别源码+文档

    还在玩minist?fashionmnist?不如来尝试一下类别多大3000+的汉字手写识别吧!!虽然以前有一些文章教大家如何操作,但是大多比较古老,这篇文章将用全新...(想亲身体验模型训练发散抓狂的可以来尝试一下!)。 但是,

Global site tag (gtag.js) - Google Analytics