亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

是不是要定義final不可變參數,將參數綁定到另一個局部變量并改變局部變量?

是不是要定義final不可變參數,將參數綁定到另一個局部變量并改變局部變量?

函數式編程 2019-04-18 14:11:09
注意:同樣的問題適用于其他不可變類型,如String和Boolean。我有這樣的方法(這是一個更復雜的方法的簡單例子):例1public BigDecimal addTwo(BigDecimal bigDecimal) {     bigDecimal = bigDecimal.add(new BigDecimal(2));     return bigDecimal;}我知道,我可以簡單地回來bigDecimal.add(new BigDecimal(2))。但這只是一個例子。這段代碼的問題是我無法添加final到方法參數和Eclipse困擾我。所以我會寫:例2public BigDecimal addTwo(final BigDecimal bigDecimal) {     BigDecimal bigDecimalLocal = bigDecimal;     bigDecimalLocal = bigDecimalLocal.add(new BigDecimal(2));     return bigDecimalLocal;}我知道,我可以直接做BigDecimal bigDecimalLocal = bigDecimal.add(new BigDecimal(2))。但我再說一遍,這只是一個例子。問題是:當我這樣做時:BigDecimal bigDecimalLocal = bigDecimal;我不是在創造一個新的BigDecimal。我將同一個對象分配給另一個變量。我在SO上發現了一種簡單的克隆BigDecimal方法:例3BigDecimal bigDecimalLocal = new BigDecimal(bigDecimal.toString());問題是:既然BigDecimal是不可改變的,這真的有必要嗎?我不能像示例#2那樣簡單嗎?我認為final關鍵字不能以這種方式失效。
查看完整描述

3 回答

?
開心每一天1111

TA貢獻1836條經驗 獲得超13個贊

示例2很好,但您根本不需要局部變量,我認為它們會降低方法的可讀性。我會這么做的

public BigDecimal addTwo(final BigDecimal bigDecimal) {
    return bigDecimal.add(BigDecimal.valueOf(2));}

如果我想添加另一個BigDecimal怎么辦?“我必須返回bigDecimal.add(BigDecimal.valueOf(2).add(BigDecimal.valueOf(3))?我認為它不那么可讀。

如果要添加兩次(或多個常量),那么將常量提取為常量可能是有意義的。喜歡,

private static final BigDecimal TWO = BigDecimal.valueOf(2);private static final BigDecimal THREE = BigDecimal.valueOf(3);
public static BigDecimal addTwoAndThree(final BigDecimal bigDecimal) {
    return TWO.add(THREE).add(bigDecimal);}


查看完整回答
反對 回復 2019-05-15
?
夢里花落0921

TA貢獻1772條經驗 獲得超6個贊

看來你不明白引用的概念。

當你有這個:

BigDecimal incoming = new BigDecimal(2);addTwo(incoming);...
public BigDecimal addTwo(BigDecimal bigDecimal) {
  bigDecimal = bigDecimal.add(new BigDecimal(2));}

事情是:在該方法結束后incoming仍然是2

add()調用創建一個新的 BigDecimal對象,然后變量bigDecimal指向該新對象。

但參考incoming仍指向舊對象!

簡而言之:方法參數的關鍵字final 不完全符合你的想法。其唯一目的是阻止您重新分配該參數/值。所以你真的想了解對象和引用之間的區別。然后關于通過引用傳遞


查看完整回答
反對 回復 2019-05-15
  • 3 回答
  • 0 關注
  • 613 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號