通过java程序模拟实现地铁票价2+2=12(r3笔记第94天)

地铁票价在这周六开始就要上涨了,这几天做地铁明显感觉人比平常多了很多。大家也都在默默的等待这一刻的到来,尽管很不情愿,但是终究会来。 到时候肯定吐槽的人一抓一大把,毕竟一天上班4块的时代就要终结,一下子变成十几块,票价涨了,生活成本都在上涨,其它都没有变化,生活着实不容易啊。 我每天从二号线转到四号线,一天下来成本是6+6=12块。如果还是4块钱的成本就好了。最后通过程序来模拟了实现了2+2=12.

我们先来看一个简单的例子。 import java.lang.reflect.Field;

public class TestPlus { public static void main(String args[]) { Integer ticket_fee1=new Integer(2); Integer ticket_fee2=new Integer(2); System.out.println(ticket_fee1==ticket_fee2); ticket_fee1=2; ticket_fee2=2; System.out.println(ticket_fee1==ticket_fee2); System.out.println(ticket_fee1+ticket_fee2); }

} 程序的输出是: false true 4 这个程序是用java实现,巧妙地运用了对象缓存。对象申请的原则来说,每次new出来的对象地址是不一样的。但是标黄的部分使用到了缓存,所以这个时候得到的地址是相同的。这个是在JVM中,默认生成了一些对象的实例,如果需要实例在池中已经存在的时候,直接返回已经生成对象的引用。这样可以减少实例的数目和改善程序性能。 补充一下,如果上面的Integer换成int,结果又会不一样。 明白了这些之后我们来实现2+2=12,毕竟我们想要的是这个结果。

import java.lang.reflect.Field;
public class TestPlus {
 public static  void main(String args[]) throws NoSuchFieldException, SecurityException,  IllegalArgumentException, IllegalAccessException{
  Integer ticket_fee1=new  Integer(2);
  Integer ticket_fee2=new Integer(2);

  Class  ticket_fee=Integer.class.getDeclaredClasses()[0];
  Field c  =ticket_fee.getDeclaredField("cache");
  c.setAccessible(true);
  Integer[]  array=(Integer[])  c.get(ticket_fee);
  array[132]=array[140];
 
  System.out.printf("票价实付金额为:%d元",ticket_fee1+ticket_fee1);
 }
 
}

程序的输出就是: 票价实付金额为:12元 基本原理就是利用缓存的读写接口,把4这个缓存对象的指针改为指向12的实例对象了。这样程序取出4的时候,实际上返回的是12的引用 如果能够妥善使用这个程序,对于大家的生活现实意义是巨大的:)

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2014-12-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序员互动联盟

【答疑解惑】i++,++i,i+=的区别

说起这个i++, ++i 入门练习都会搞这个,一如既往,百试不爽。 表达式 a = i++; 它等价于 a = i ; i = i + 1; 表达式 a = ...

32850
来自专栏阿凯的Excel

Python读书笔记23(浅谈为什么要用类)

题外话:好几个朋友和我提出最好能写一个Python入门的合集版,我会尽快将基础知识分享完,然后重新整理一下过去分享的所有材料。 如果只是想学P...

42070
来自专栏码云1024

RandomAccessFile&IO流&排序&方法论

29370
来自专栏java学习

Java每日一题_关于类继承常见的易错面试题

子类的构造方法总是先调用父类的构造方法,如果子类的构造方法没有明显地指明使用父类的哪个构造方法,子类就调用父类不带参数的构造方法。 而父类没有无参的构造函数,...

14320
来自专栏编程

Python利器之迭代器

各位小伙伴们 大家周四愉快 今天要和大家探讨一个 Python的特色功能 也是Python有别于其他变成语言的 强大利器 迭代器 迭代这一个词可能有的小伙伴不理...

19870
来自专栏从流域到海域

《笨办法学Python》 第35课手记

《笨办法学Python》 第35课手记 本节课讲函数和分支的,实际上是一次综合练习,代码有点长,请先纠正代码中的错误使脚本能够运行。 原代码中使用三个空格来进行...

227100
来自专栏Python数据科学

如何用Python递归地思考问题?

递归是一个很经典的算法,在实际中应用广泛,也是面试中常常会提到的问题。本文就递归算法介绍如何在Python中实现递归的思想,以及递归在Python中使用时的一些...

88660
来自专栏take time, save time

你所能用到的数据结构(八)

十一、不能被应用的理论不是好研究 前面介绍了堆栈的一些小小的理论模型,那么这样一个东西有什么作用呢?实际中不可能有那么一辆停在站台前方堵死的火车的,即使有,也...

28640
来自专栏C语言及其他语言

[每日一题]大、小写问题

题目描述 输入一串字符,将其中的大写变成小写,若不为大写则原样输出 输入 任意字符串(长度在100以内)以回车表示输入结束 输出 将其中的大写 输出相应的小写,...

31760
来自专栏web编程技术分享

JavaScript: 零基础轻松学闭包(2)

29390

扫码关注云+社区

领取腾讯云代金券