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

时间:2022-05-04
本文章向大家介绍通过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的引用 如果能够妥善使用这个程序,对于大家的生活现实意义是巨大的:)