通過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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【Java】——模擬登入實現Java
- 父子元件通訊——模擬12306購票新增乘車人元件
- 通過session模擬登陸Session
- javascript模擬實現函式過載JavaScript函式
- 12.2 實現鍵盤模擬按鍵
- 12.3 實現模擬滑鼠錄製回放
- 通過抓包實現Python模擬登陸各網站原理分析Python網站
- Java模擬賽跑過程Java
- 小程式居然可以用WXS模擬實現過濾器!過濾器
- 如何用JavaScript實現2+2=5?JavaScript
- css模擬實現手機通訊錄佈局效果CSS
- 通過單例模式模擬RAC連線單例模式
- Java實現TCP通訊程式JavaTCP
- 深入理解 Java 的整型型別:如何實現 2+2=5?Java型別
- promise的模擬實現Promise
- javascript模擬實現replaceAll()JavaScript
- 【實戰】通過Python實現疫情地圖視覺化Python地圖視覺化
- javascript模擬實現ArrayList效果程式碼例項JavaScript
- 模擬實現Object.is()方法程式碼例項Object
- javascript模擬實現trim()方法例項程式碼JavaScript
- javascript模擬實現toAarray()方法程式碼例項JavaScript
- 通過 App Groups 實現程式間通訊APP
- javascript模擬new的實現JavaScript
- JavaScript 模擬new的實現JavaScript
- JavaScript模擬實現replaceAll方法JavaScript
- 一款讓你感動到Cry的地鐵App | 地鐵通-MetroMan #iOS #AndroidAPPiOSAndroid
- Java的代理模式(通過公共介面實現)Java模式
- 通過socket實現DUP程式設計程式設計
- Java的通過管道來實現執行緒通訊Java執行緒
- JavaScript模擬拋物運動的程式碼實現JavaScript
- js模擬實現hashCode()方法程式碼例項JS
- js模擬實現多型效果程式碼例項JS多型
- js模擬實現replaceAll()函式程式碼例項JS函式
- css模擬實現雙擊效果程式碼例項CSS
- css模擬實現雙擊事件程式碼例項CSS事件
- 模擬實現連結title效果程式碼例項
- 飛秋的模擬實現程式碼,很好很山寨!
- 模擬三菱FX2N系列PLC的串列埠通訊(實測通過)串列埠