編寫高質量代碼:改善Java的151個建議四(基本類型)21-30

該書籍PDF下載地址:http://download.csdn.net/download/muyeju/10001473

基本類型有8個:byte,short,int,char,long,double,float,boolean

21.用偶判斷,不用奇判斷

 當判斷一個數是偶數還是奇數的時候,應該判斷是否是偶數。

 i%2==0?"偶數":"奇數"

 取余的原理:

 被除數-被除數/除數*除數

22.貨幣的值

  貨幣的值一般都是2為小數,如果用浮點類型的話,計算機計算出來的結果可能是不準確的,它只能無限接近某個值,而不能完全精確,這是由浮點數的存儲規則決定的。就像十進制里面三分之一不能準確表示,二進制里面五分之一也不能準確表示。

  例:10-9.6=0.40000000000000036

 解決方法:

 1.使用BigDecimal處理

 2.使用整形,只要展示時縮小100倍就可以了,及是以分為單位

23.基本類型轉換時,使用主動聲明方式減少不必要的Bug

  Java是先運算,然后進行類型轉換。超過了int的最大值時,其值就是負,因為過界了就會從頭開始

24.基本類型的邊界

? ? 對基本類型進行判斷的時候,應該注意其邊界值,一旦超過邊界值,就會使校驗條件失效。所以應避免輸入或傳入的值就行計算,直接用輸入或傳入的值進行判斷

 例如:

package deep;import java.util.Scanner;public class Client {// 一個會員擁有產品的最多數量public static final int LIMIT = 2000;public static void main(String[] args) {// 會員當前擁有的產品數量int cur = 1000;Scanner input = new Scanner(System.in);System.out.println("請輸入需要預定的數量:");while (input.hasNextInt()) {int order = input.nextInt();// 當前擁有的與準備訂購的產品數量之和if (order > 0 && order + cur <= LIMIT) {System.out.println("你已成功預定了" + order + "個產品!");} else {System.out.println("超過限額,預訂失敗!");}}}
}

當輸入的值是2147483647 這個的時候,會發現也預定成功,這個因為數字越界,使檢驗條件失效

修改:(order > 0 && order <= LIMIT - cur)成這樣就行了,應該避免輸入(傳入)的參數進行計算

25.根據不同的場景,選擇不同的舍入模式

  ?RoundingMode的幾種舍入模式:

  ? ? ?1.RoundingMode.CEILING:向正無窮方向舍入

   ?2.RoundingMode.FLOOR:像負無窮方向舍入

   ?3.RoundingMode.UP:像絕對值最大的方向舍入,舍棄非零即進位

   ?4.RoundingMode.DOWN:像絕對值最小的方向舍入,所有位都舍棄,不存在進位的情況

   ?5.RoundingMode.HALF_UP:最近數字舍入(5舍)

   ?6.RoundingMode.HALF_DOWN:最近數字舍入(5舍)

   ?7.RoundingMode.HALF_EVEN:銀行家算法(4舍6入5考慮,5后非0就進1,5后為0看奇偶,5前為偶應舍去,5前為奇要進一)

26.包裝類型參與計算時,要做null值校驗

  例:

  

27.包裝類型的大小比較

  包裝類的比較不能用==,因為包裝類是對象,用==比較的是對象的引用,即地址是否相等。(如果是基本類型,==比較的是它們的值是否相等)

  用compareTo()方法比較,相等返回0,大于返回1,小于返回-1

  例:

  

public static void main(String[] args) {Integer i = new Integer(300) ;Integer j = new Integer(-600) ;int k = j.compareTo(i) ;System.out.println(k);//結果:-1}

28.優先使用整型池

  整型池:在IntegerCache類中,存在一個cache靜態數組,容納的是-127到128之間的Integer對象。通過valueOf產生包裝對象時,如果int在-128到127之間,則之間從整型池中獲得對象,不在該范圍類的int類型則通過new生成包裝對象。

  整型池的存在提高了系統性能,節約了內存空間

  通過包裝類的valueOf生成包裝實例顯著提高空間和時間性能

29.基本類型優先使用

  因為有包裝類時,可能會進行一些拆箱裝箱的過程,從而導致出現一些想不到的問題

30.不要隨便設置隨機種子

  隨機數和種子之間的關系:

    種子不同,產生不同的隨機數

    種子相同,即使實例不同,也產生相同的隨機數

    例:

public static void main(String[] args) {Random r = new Random(1000) ;for(int i=1;i<4;i++){System.out.println("--------"+r.nextInt());}
}

  結果始終是:

---------1244746321
--------1060493871
---------1826063944

所以,若非必要,不要設置隨機數種子

  

轉載于:https://www.cnblogs.com/-scl/p/7641562.html

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

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

相關文章

ABP vNext微服務架構詳細教程(補充篇)——單層模板(下)

業務代碼2聚合服務聚合服務層和基礎服務層相同的道理&#xff0c;在Demo.Core.Contracts增加Services文件夾&#xff0c;并添加Notifications子文件夾&#xff0c;在其中添加Dtos文件夾并添加兩個DTO與基礎服務對應&#xff1a;using Volo.Abp.Application.Dtos;namespace Demo…

PHP 電子商城基本數據表

1、品牌表 tp_brand CREATE TABLE tp_brand (id smallint(5) unsigned NOT NULL AUTO_INCREMENT COMMENT 品牌表,name varchar(60) NOT NULL DEFAULT COMMENT 品牌名稱,logo varchar(80) NOT NULL DEFAULT COMMENT 品牌logo,desc text NOT NULL COMMENT 品牌描述,url varcha…

摘要,日志

1.hashlib 模塊: 由于數據的不安全性,為了保證用戶的信息絕對安全,所有所有人的賬號密碼不能以明文的形式存儲, 而是經過適當的處理以密文的形式存儲. hashlib對同一個字符串在不同的語言,不同的環境(操作系統,版本,時間)中加密得到的是同一個密文串,不同的字符串得到的密文是不…

《網站情感化設計與內容策略》一第1章 情感化設計1.1 革命:有失亦有得

本節書摘來自異步社區《網站情感化設計與內容策略》一書中的第1章&#xff0c;第1.1節&#xff0c;作者 【美】Aarron Walter , Erin Kissane&#xff0c;更多章節內容可以訪問云棲社區“異步社區”公眾號查看 第1章 情感化設計 網站情感化設計與內容策略 1.1 革命&#xff1…

php自動加載機制的實現

一、什么是自動加載 自動加載就是當我們在當前文件中實例化一個不存在的類時&#xff0c;調用自動加載機制引入相應的類文件。 注&#xff1a;自動加載有兩種方式&#xff08;都是php內置的&#xff09;&#xff0c;一種是通過__autoload(),另一種是通過spl_autoload_registe…

MySQL之 從復制延遲問題排查

一、從庫復制延遲問題 1、可能的原因如下&#xff08;1&#xff09;主從服務器處于不同的網絡之中&#xff0c;由于網絡延遲導致&#xff1b;&#xff08;2&#xff09;主從服務器的硬件配置不同&#xff0c;從服務器的硬件配置&#xff08;包括內存&#xff0c;CPU&#xff0c…

《樹莓派滲透測試實戰》——2.12 用例子總結以上步驟

本節書摘來異步社區《樹莓派滲透測試實戰》一書中的第2章&#xff0c;第2.12節&#xff0c;作者【美】Joseph Muniz&#xff08;約瑟夫 穆尼斯&#xff09; , Aamir Lakhani&#xff08;阿米爾 拉克哈尼&#xff09;&#xff0c;更多章節內容可以訪問云棲社區“異步社區”公眾號…

申請成為qq互聯個人開發者步驟(注意事項)2018

一、官方網址 官方地址&#xff1a;https://connect.qq.com/manage.html#/ 二、申請時注意事項&#xff1a; 1、申請時的名稱欄必須填寫身份證上的姓名&#xff0c;否則是不給通過的 2、上傳照片時&#xff0c;需要本人手持身份證&#xff0c;重點是照片中身份證上頭像的位置要…

《Swift開發實戰》——第1章,第1.4節啟動iOS 8模擬器

本節書摘來自異步社區《Swift開發實戰》一書中的第1章&#xff0c;第1.4節啟動iOS 8模擬器&#xff0c;作者 李寧&#xff0c;更多章節內容可以訪問云棲社區“異步社區”公眾號查看 1.4 啟動iOS 8模擬器Xcode是一款功能全面的應用程序&#xff0c;通過此工具可以輕松輸入、編譯…

基于.NetCore開發博客項目 StarBlog - (18) 實現本地Typora文章打包上傳

1前言九月太忙&#xff0c;只更新了三篇文章&#xff0c;本來這個功能是從九月初就開始做的&#xff0c;結果一直拖到現在國慶假期才有時間完善并且寫文章~之前我更新了幾篇關于 Python 的文章&#xff0c;有朋友留言問是不是不更新 .Net 了&#xff0c;那肯定不能啊&#xff0…

《算法導論》讀書筆記--第1、2章課后題 (轉)

第一章 轉自http://www.cnblogs.com/batteryhp/p/4654860.html 思考題 1-1&#xff08;運行時間的比較&#xff09;確定時間t內求解的問題的最大規模。 上面是網上提供的答案。 注意點&#xff1a; 1、最左邊一列的是關于n的增長情況描述&#xff0c;值得記住的是這些增長的排…

PHP開發自己的框架必備知識點

一、PHP常用的四種數據結構 簡介&#xff1a;spl是php的一個標準庫。 官方文檔&#xff1a;http://php.net/manual/zh/book.spl.php <?php//spl&#xff08;php標準庫&#xff09;數據結構/*** 棧&#xff08;先進后出&#xff09;*/ $stack new SplStack(); $stack-&g…

Linux 環境下 jdk1.8 maven3.2.3 Git2.8.0 安裝腳本

2019獨角獸企業重金招聘Python工程師標準>>> # Author: peizhouyu # Date: 2018-09-07 14:24:11 # Last Modified by: peizhouyu # Last Modified time: 2018-09-07 16:02:58#!/bin/bash SOFT_PATH/opt/softif [ ! -d $SOFT_PATH ];then mkdir $SOFT_PATH else …

《嵌入式設備驅動開發精解》——導讀

前言 嵌入式設備驅動開發精解本書的編寫主要是針對從事嵌入式軟件開發人員。本書的內容主要涵蓋ARM CPU以及各種常用外部設備驅動開發的方方面面&#xff0c;包括各種硬件接口、硬件接口協議說明以及各種外設的使用及調試方法&#xff0c;特別是對于開發調試過程中可能遇到的各…

C# WPF通過WindowChrome自定義窗體

概述在WPF界面開發中&#xff0c;系統默認的窗口比較丑&#xff0c;有時候想自定義窗體&#xff0c;比如微信的客戶端窗口這樣&#xff1a;使得左邊的一塊頂到最上端&#xff0c;如下圖所示&#xff1a;這時候我們可以 WindowStyle"None"&#xff0c;AllowsTranspare…

【轉載】遞推公式的特征方程及通項公式

先貼上鏈接&#xff1a;http://blog.csdn.net/happykocola/article/details/73933314 因為最近在復習初賽&#xff0c;然后碰到了這道題&#xff0c;并不會做&#xff0c;才發現有這么高明的方法... 已知遞推關系式&#xff1a; f(n)5f(n-1)-6f(n-2) (n>1) f(0)1 f(1)…

【leetcode】75. Sort Colors

題目如下&#xff1a; 解題思路&#xff1a;我的解題思路是遍歷數組&#xff0c;遇到0刪除該元素并插入到數組頭部&#xff0c;遇到1則不處理&#xff0c;遇到2刪除該元素并插入到數組尾部。 代碼如下&#xff1a; class Solution(object):def sortColors(self, nums):"&q…

每日一言學做人,古之學問,博大精深

前言&#xff1a; 要成為一個有格局&#xff0c;有修養的人&#xff0c;吸納一些有道理的思想和做法&#xff0c;去逐漸提高自己是非常有必要的&#xff0c;有一言&#xff0c;做事先做人&#xff0c;意即于此。因此&#xff0c;每日將自己看到的一段有感的話記錄下來&#xf…

Seal-Report: 開放式數據庫報表工具

Seal Report是.Net的一個基于Apache 2.0 開源工具&#xff0c;完全用C# 語言編寫&#xff0c;最新的6.6 版本采用.NET 6&#xff0c;github: https://github.com/ariacom/Seal-Report。Seal Report提供了一個完整的框架&#xff0c;用于從任何數據庫或任何非SQL源生成每日報告。…

《Ceph源碼分析》——第2章,第2節Buffer

本節書摘來自華章出版社《Ceph源碼分析》一書中的第2章&#xff0c;第2.2節Buffer&#xff0c;作者常濤&#xff0c;更多章節內容可以訪問云棲社區“華章計算機”公眾號查看 2.2 BufferBuffer就是一個命名空間&#xff0c;在這個命名空間下定義了Buffer相關的數據結構, 這些數…