通過java程式模擬實現地鐵票價2+2=12
到時候肯定吐槽的人一抓一大把,畢竟一天上班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的引用
如果能夠妥善使用這個程式,對於大家的生活現實意義是巨大的:)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-1379169/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Swoole 中通過 process 模組實現多程式
- 【Java】——模擬登入實現Java
- 通過session模擬登陸Session
- 通過抓包實現Python模擬登陸各網站原理分析Python網站
- 小程式居然可以用WXS模擬實現過濾器!過濾器
- 如何用JavaScript實現2+2=5?JavaScript
- Java實現TCP通訊程式JavaTCP
- 通過 App Groups 實現程式間通訊APP
- 深入理解 Java 的整型型別:如何實現 2+2=5?Java型別
- 【實戰】通過Python實現疫情地圖視覺化Python地圖視覺化
- Java的通過管道來實現執行緒通訊Java執行緒
- promise的模擬實現Promise
- 父子元件通訊——模擬12306購票新增乘車人元件
- 通過佇列實現棧OR通過棧實現佇列佇列
- Java通過SSLEngine與NIO實現HTTPS訪問JavaHTTP
- (P12)miniftpd專案實戰12:內部程式間通訊模組設計FTP
- JavaScript模擬拋物運動的程式碼實現JavaScript
- Webview獨立程式並通過AIDL實現資料通訊WebViewAI
- 通過 Socket 實現 TCP 程式設計入門TCP程式設計
- 通過 Socket 實現 UDP 程式設計 入門UDP程式設計
- 模擬實現apply/call/bindAPP
- javascript模擬new的實現JavaScript
- JavaScript 模擬new的實現JavaScript
- JavaScript模擬實現replaceAll方法JavaScript
- bind,call,apply模擬實現APP
- JavaScript中模擬實現jsonpJavaScriptJSON
- Java通過Mybatis實現批量插入資料到Oracle中JavaMyBatisOracle
- csp-s 模擬 12
- 24/8/12 模擬賽
- 通過Gradle自動實現Android元件化模組構建GradleAndroid元件化
- vue-toy: 200行程式碼模擬Vue實現Vue行程
- Proteus實現簡單51程式的設計與模擬
- LRU 實現 通過 LinkedHashMapHashMap
- 通過模板實現POI
- 「小程式JAVA實戰」 小程式抽離公用方法進行模組化(12)Java
- PHP單例模式模擬Java Bean實現方法示例詳解PHP單例模式JavaBean
- Java的Covariance設計原理和SAP ABAP的模擬實現Java
- 通過Rxjs五行程式碼實現EventBusJS行程
- 通過 Swoole\Table 實現 Swoole 多程式資料共享