持續總結中!2024年面試必問 100 道 Java基礎面試題(四十)

上一篇地址:持續總結中!2024年面試必問 100 道 Java基礎面試題(三十九)-CSDN博客

七十九、Java泛型中的T、R、K、V、E分別指什么?

在Java泛型中,TRKVE 是類型參數的常見占位符,它們用來表示泛型類型中的類型變量。這些占位符通常用于泛型類、泛型接口或泛型方法的定義中,它們分別代表不同的類型,但在泛型的上下文中,它們是等價的,可以互換使用。以下是每個占位符的常見用法:

  1. T(Type)

    • T?是最常用的泛型類型參數占位符,代表任意類型。它通常用于表示泛型類或方法中的類型,可以是任何類或接口。
    public class GenericClass<T> {private T value;public GenericClass(T value) {this.value = value;}public T getValue() {return value;}
    }
  2. R(Return Type)

    • R?通常用于泛型方法的返回類型。它代表方法返回值的類型,這個類型可以由方法的泛型參數決定。
    public class UtilityClass {public static <R> R convertType(Object obj, Class<R> clazz) {// 轉換obj到Class<R>指定的類型return null;}
    }
  3. KV

    • K?和?V?常用于表示鍵(Key)和值(Value)的類型,特別是在定義關聯數組或映射(如?Map)時。
    public class Pair<K, V> {private final K key;private final V value;public Pair(K key, V value) {this.key = key;this.value = value;}// getters and other methods
    }
  4. E(Element)

    • E?通常用于表示元素類型,比如在定義一個可以存儲任意類型元素的集合類時。
    public class ElementList<E> {private List<E> elements;public void addElement(E element) {elements.add(element);}// 其他方法
    }

這些泛型類型參數占位符的使用約定并非強制性的,它們只是常見的用法,目的是為了讓代碼更具可讀性。開發者也可以使用其他任何有效的標識符作為泛型類型參數的名稱,例如MyTypeInputTypeOutputType 等。

示例代碼

public class Example<T, V> {private T id;private V name;public Example(T id, V name) {this.id = id;this.name = name;}public static <K, V> Map<K, V> createMap(K key, V value) {Map<K, V> map = new HashMap<>();map.put(key, value);return map;}public static void main(String[] args) {Example<Integer, String> example = new Example<>(1, "Example");Map<String, Integer> map = createMap("one", 1);}
}

在這個示例中,Example 類使用了 TV 作為泛型類型參數,而 createMap 靜態方法使用了 KV 來創建一個 Map 對象。

總結來說,泛型類型參數的名稱可以根據上下文和開發者的偏好來選擇,關鍵是保持代碼的清晰和一致性。

八十、Java金額計算怎么避免精度丟失?

在Java中進行金額計算時避免精度丟失是一個重要的考慮因素,因為錯誤的結果可能會導致財務錯誤或不準確的報告。以下是一些避免精度丟失的方法:

使用合適的數據類型

  1. BigDecimal

    • BigDecimal?類是Java提供的一個用于進行精確小數運算的類,它允許進行多精度的定點數運算,非常適合用于金額計算。
  2. doublefloat

    • double?和?float?類型是基于IEEE 754標準的浮點數,它們在表示非常大或非常小的數值時可能會有精度問題,因此不推薦用于精確的金額計算。

使用?BigDecimal?的最佳實踐

  1. 避免使用構造器

    • 不推薦使用?BigDecimal?的構造器(如?BigDecimal(double))從?double?或?float?類型創建?BigDecimal?實例,因為這可能會引入初始的精度問題。
  2. 使用字符串構造器

    • 使用?BigDecimal(String)?構造器從字符串創建?BigDecimal?對象,這樣可以確保數值的精確表示。
  3. 鏈式操作

    • 使用?BigDecimal?的鏈式方法調用,如?add()subtract()multiply()?和?divide()?等,來進行運算。
  4. 設置小數點后的位數

    • 在進行除法運算時,可以使用?setScale()?方法設置小數點后的位數和舍入模式。

示例代碼

import java.math.BigDecimal;
import java.math.RoundingMode;public class MonetaryCalculation {public static void main(String[] args) {// 使用字符串構造BigDecimal對象BigDecimal amount1 = new BigDecimal("100.5");BigDecimal amount2 = new BigDecimal("2.5");// 進行加法和減法運算BigDecimal sum = amount1.add(amount2);BigDecimal difference = amount1.subtract(amount2);// 進行乘法和除法運算,并設置結果的小數點后位數BigDecimal product = amount1.multiply(amount2);BigDecimal quotient = amount1.divide(amount2, 2, RoundingMode.HALF_UP);System.out.println("Sum: " + sum);System.out.println("Difference: " + difference);System.out.println("Product: " + product);System.out.println("Quotient: " + quotient);}
}

在這個示例中,我們使用 BigDecimal 類進行了金額的加法、減法、乘法和除法運算。注意,我們使用字符串構造器創建 BigDecimal 對象,并在除法運算后設置了小數點后的位數和舍入模式。

注意事項

  • 避免類型轉換:在進行金額計算時,避免將?BigDecimal?轉換為?double?或?float?類型。
  • 舍入模式:在設置小數點位數時,選擇合適的舍入模式非常重要,如?RoundingMode.HALF_UP?是最常用的模式之一。
  • 維護精度:在設計財務系統時,始終保持足夠的精度以避免舍入誤差的累積。

總結來說,為了避免Java中的金額計算精度丟失,推薦使用 BigDecimal 類,并遵循最佳實踐,如使用字符串構造器創建對象,鏈式調用運算方法,并在需要時設置小數點后的位數和舍入模式。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/9812.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/9812.shtml
英文地址,請注明出處:http://en.pswp.cn/web/9812.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Babylon.js 7.0開發入門教程

Babylon.js 是一個功能強大的開源 3D 引擎&#xff0c;能夠使用 JavaScript 渲染交互式 3D 和 2D 圖形。它是為 Web 甚至 VR 創建游戲、演示、可視化和其他 3D 應用程序的絕佳選擇。Babylon.js最新版本是7.0。 Babylon.js 是免費、開源和跨平臺的&#xff0c;是 Unity 和 Unre…

LeetCode 每日一題 ---- 【1463.摘櫻桃 II】

LeetCode 每日一題 ---- 【1463.摘櫻桃 II】 1463.摘櫻桃II方法&#xff1a;動態規劃&#xff08;遞推&#xff09; 1463.摘櫻桃II 方法&#xff1a;動態規劃&#xff08;遞推&#xff09; 昨天是摘櫻桃I&#xff0c;今天是II&#xff0c;與昨天的區別主要在于&#xff0c;今…

【進程替換】多進程程序替換原理 | 進程程序替換函數 | execlexecv | execlpexecvp

目錄 多進程程序替換 多進程程序替換原理 進程程序替換函數詳解 execl&execv execlp&execvp execle&execvpe execve 多進程程序替換 我們想要進程替換的同時不影響舊的進程&#xff08;使用多進程版&#xff09;fork創建子進程&#xff0c;讓子進程去替換執…

2008NOIP普及組真題 4. 立體圖

線上OJ&#xff1a; 一本通-1977&#xff1a;【08NOIP普及組】立體圖 核心思想&#xff1a; 本題采用模擬方法一個一個畫小方塊&#xff08;雖然畫的是立體空間的積木&#xff0c;但本質還是在二維平面上畫圖形&#xff09; 本題的難點在于&#xff1a; 1、如何確定二維平面畫…

tengine-docker鏡像制作

1.下載 wget https://tengine.taobao.org/download/tengine-3.0.0.tar.gz 或者直接下載這個包括下邊兩個配置文件了 https://download.csdn.net/download/cyw8998/89286114 2.編輯nginx.conf文件 #####user nobody; worker_processes 1;#error_log logs/error.log; #er…

淺析擴散模型與圖像生成【應用篇】(二十三)——Imagic

23. Imagic: Text-Based Real Image Editing with Diffusion Models 該文提出一種基于文本的真實圖像編輯方法&#xff0c;能夠根據純文本提示&#xff0c;實現復雜的圖像編輯任務&#xff0c;如改變一個或多個物體的位姿和組成&#xff0c;并且保持其他特征不變。相比于其他文…

c語言題庫之序列合并

文章目錄 前言C語言題目&#xff1a;分析1. 合并邏輯2.圖解合并邏輯 代碼實現注意事項總結思考 前言 在編程中&#xff0c;我們經常遇到需要將兩個有序序列合并為一個有序序列的問題。下面&#xff0c;我們就來詳細探討一下如何解決這個問題&#xff0c;包括輸入處理、合并邏輯…

python 根據網址和關鍵詞批量下載影像

最近用到了GLASS的LAI產品&#xff0c;但這個產品的文件夾分得很細&#xff0c;我需要的影像又有8個瓦片&#xff0c;一個一個點擊很麻煩&#xff0c;于是探索了批量下載的方法 一、下載1幅 import requests import re import os import requests import re# 網頁URLurl &…

深入理解Java HashSet類及其實現原理

哈嘍&#xff0c;各位小伙伴們&#xff0c;你們好呀&#xff0c;我是喵手。運營社區&#xff1a;C站/掘金/騰訊云&#xff1b;歡迎大家常來逛逛 今天我要給大家分享一些自己日常學習到的一些知識點&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相學習&#xff0c;一…

Java中什么是多態?多態的實現原理是什么?多態在Java中的意思實現方式是什么?多態在框架設計中有什么作用應用場景?

什么是多態&#xff1f; 多態是面向對象編程中的一個重要概念&#xff0c;它允許不同類的對象對同一消息做出響應。在 Java中&#xff0c;多態通常體現為子類對象可以替代父類對象的特性。這意味著你可以使用父類的引用來引用子類的對象。 多態的實現原理&#xff1a; 多態的…

如何在 CentOS 上安裝并配置 Redis

如何在 CentOS 上安裝并配置 Redis 但是太陽&#xff0c;他每時每刻都是夕陽也都是旭日。當他熄滅著走下山去收盡蒼涼殘照之際&#xff0c;正是他在另一面燃燒著爬上山巔散烈烈朝暉之時。 ——史鐵生 環境準備 本教程將在 CentOS 7 或 CentOS 8 上進行。確保你的系統已更新到最…

Channel實現Flutter與原生平臺之間的雙向通信

文章目錄 &#xff08;一&#xff09;通過MessageChannel實現Flutter與原生平臺之間的雙向通信Flutter端實現MessageChannel通信步驟&#xff1a;Android端實現MessageChannel通信步驟&#xff1a; &#xff08;二&#xff09;通過MethodChannel實現Flutter與原生平臺之間的雙向…

uniapp/微信小程序實現加入購物車點擊添加飛到購物車動畫

1、預期效果 2、實現思路 每次點擊添加按鈕時&#xff0c;往該按鈕上方添加一個懸浮元素&#xff0c;通過位移動畫將元素移到目標位置。 1. 為每個點擊元素設置不同的class&#xff0c;才能通過uni.createSelectorQuery來獲取每個元素的節點信息&#xff1b; 2. 添加一個與…

c++:(map和set的底層簡單版本,紅黑樹和AVL樹的基礎) 二叉搜索樹(BST)底層和模擬實現

文章目錄 二叉搜索樹的概念二叉搜索樹的操作二叉搜索樹的查找find 二叉搜索樹的模擬實現構造節點insertfinderase(細節巨多,面試可能會考)a.葉子節點b.有一個孩子左孩子右孩子 c.有兩個孩子注意: erase代碼 中序遍歷 二叉搜索樹的應用k模型k模型模擬實現的總代碼 k-value模型k-…

7-Zip命令行調用命令收集(20個)

列出壓縮文件的內容: 7z l archive.7z 解壓壓縮文件到當前目錄: 7z x archive.7z 解壓壓縮文件到指定目錄: 7z x archive.7z -o"C:\path\to\extract" 創建新的壓縮文件 (添加到archive.7z): 7z a archive.7z file_to_compress 創建包含多個文件的壓縮文件: 7z a arc…

【JVM】了解JVM規范中的虛擬機結構

目錄 JVM規范的主要內容 1&#xff09;字節碼指令集(相當于中央處理器CPU) JVM指令分類 2&#xff09;Class文件的格式 3&#xff09;數據類型和值 4&#xff09;運行時數據區 5&#xff09;棧幀 6&#xff09;特殊方法 7&#xff09;類庫 JVM規范的主要內容 1&#…

Vue3+ElementPlus+TS開發業務功能的問題匯總(持續更新)

1.開發表單彈框功能時遇到兩個問題&#xff1a;加入了校驗規則后&#xff0c;無論下拉框是否選擇數據下面的紅色提示都會觸發顯示不會自動隱藏 &#xff1b; 另外&#xff0c;新增的功能在提交后數據無法重置&#xff0c;這種在修改時可能會出現&#xff0c;但新增正常情況是不…

走進C++:C到C++的過渡

目錄 什么是C呢&#xff1f; C的發展史 多了一些吃前來很香的“語法糖”。 語法糖一&#xff1a;命名空間 命名空間有個強大的功能 如何使用 語法糖二&#xff1a;缺省參數 語法糖三&#xff1a;函數重載 語法糖四&#xff1a;引用 引用傳參 引用返回 引用和…

【ZZULIOJ】1100: 求組合數(函數專題)(Java)

目錄 題目描述 輸入 輸出 樣例輸入 Copy 樣例輸出 Copy 提示 code 題目描述 馬上要舉辦新生程序設計競賽了&#xff0c;與以往不同的是&#xff0c;本次比賽以班為單位&#xff0c;為了全面衡量一個班級的整體水平&#xff0c;要求從一個班的m位同學中任選k位同學代表本…

Android GPU渲染SurfaceFlinger合成RenderThread的dequeueBuffer/queueBuffer與fence機制(2)

Android GPU渲染SurfaceFlinger合成RenderThread的dequeueBuffer/queueBuffer與fence機制&#xff08;2&#xff09; 計算fps幀率 用 adb shell dumpsys SurfaceFlinger --list 查詢當前的SurfaceView&#xff0c;然后有好多行&#xff0c;再把要查詢的行內容完整的傳給 ad…