深入学习java源码之Math.max()与 Math.min()

java基本数据类型及自动转型

8种基本数据类型及其所占空间大小:

一、byte,占用一个字节,取值范围为 -128-127,默认是“\u0000”,表示空
二、short,占用两个字节,取值范围为 -32768-32767
三、int,占用四个字节,-2147483648-2147483647
四、long,占用八个字节,对 long 型变量赋值时必须加上"L"或“l”,否则不认为是 long 型
五、float,占用四个字节,对 float 型进行赋值的时候必须加上“F”或“f”,如果不加,会产生编译错误,因为系统
自动将其定义为 double 型变量。double转换为float类型数据会损失精度。float a = 12.23产生编译错误的,float a = 12是正确的
六、double,占用八个字节,对 double 型变量赋值的时候最好加上“D”或“d”,但加不加不是硬性规定
七、char,占用两个字节,在定义字符型变量时,要用单引号括起来
八、boolean,只有两个值“true”和“false”,默认值为false,不能用0或非0来代替,这点和C语言不同

自动类型转换

1)两种类型是彼此兼容的

2)转换的目的类型占得空间范围一定要大于转化的源类型

正向过程:由低字节向高字节自动转换

byte->short->int->long->float->double

逆向过程:使用强制转换,可能丢失精度。

// 自动类型转换
short s=1;
int i;
// 自动类型转换 short类型转成int类型
i=s;

整数类型(byte/short/int/long)中,对于未声明数据类型的整形,其默认类型为int型。在浮点类型(float/double)中,对于未声明数据类型的浮点型,默认为double型。

int a=(int)3.14;

小数的默认数字类型是double, 例如3.12. 当float a = 3.12时会报错, 因为3.12的默认数据类型是double, 我们需要使用如下的赋值方法:

float a = 3.12F
float b = (float)3.12

第一种方法在3.12后面加了一个F, 告诉编译器这是一个float的数. 第二种方法对3.12进行了强制的类型转换.

double d=1.333;
float f;
// 把double类型的数据强制转换成float类型
f=(float)d;
int x;
double y;
x = (int)34.56 + (int)11.2;  // 丢失精度
y = (double)x + (double)10 + 1;  // 提高精度
System.out.println("x=" + x);
System.out.println("y=" + y);x=45
y=56.0
Modifier and Type Method and Description
static double max(double a, double b)

返回两个 double值中的较大值。

static float max(float a, float b)

返回两个 float的较大值。

static int max(int a, int b)

返回两个 int值中的较大值。

static long max(long a, long b)

返回两个 long的较大值。

static double min(double a, double b)

返回两个 double的较小值。

static float min(float a, float b)

返回两个 float的较小值。

static int min(int a, int b)

返回两个 int的较小值。

static long min(long a, long b)

返回两个 long的较小值。

java源码

public final class Math {private Math() {}public static int max(int a, int b) {return (a >= b) ? a : b;}public static long max(long a, long b) {return (a >= b) ? a : b;}//在有保证的非NaN参数上使用原始的逐位转换。private static long negativeZeroFloatBits  = Float.floatToRawIntBits(-0.0f);private static long negativeZeroDoubleBits = Double.doubleToRawLongBits(-0.0d);public static float max(float a, float b) {if (a != a)return a;   // a is NaNif ((a == 0.0f) &&(b == 0.0f) &&(Float.floatToRawIntBits(a) == negativeZeroFloatBits)) {// Raw conversion ok since NaN can't map to -0.0.return b;}return (a >= b) ? a : b;}public static double max(double a, double b) {if (a != a)return a;   // a is NaNif ((a == 0.0d) &&(b == 0.0d) &&(Double.doubleToRawLongBits(a) == negativeZeroDoubleBits)) {// Raw conversion ok since NaN can't map to -0.0.return b;}return (a >= b) ? a : b;}public static int min(int a, int b) {return (a <= b) ? a : b;}public static long min(long a, long b) {return (a <= b) ? a : b;}public static float min(float a, float b) {if (a != a)return a;   // a is NaNif ((a == 0.0f) &&(b == 0.0f) &&(Float.floatToRawIntBits(b) == negativeZeroFloatBits)) {// Raw conversion ok since NaN can't map to -0.0.return b;}return (a <= b) ? a : b;}public static double min(double a, double b) {if (a != a)return a;   // a is NaNif ((a == 0.0d) &&(b == 0.0d) &&(Double.doubleToRawLongBits(b) == negativeZeroDoubleBits)) {// Raw conversion ok since NaN can't map to -0.0.return b;}return (a <= b) ? a : b;}  }
public final class StrictMath {private StrictMath() {}public static int max(int a, int b) {return Math.max(a, b);}public static long max(long a, long b) {return Math.max(a, b);}public static float max(float a, float b) {return Math.max(a, b);}  public static double max(double a, double b) {return Math.max(a, b);}public static int min(int a, int b) {return Math.min(a, b);}public static long min(long a, long b) {return Math.min(a, b);}public static float min(float a, float b) {return Math.min(a, b);}public static double min(double a, double b) {return Math.min(a, b);}
}

深入学习java源码之Math.max()与 Math.min()相关推荐

  1. Math源码java_深入学习java源码之Math.sin()与 Math.sqrt()

    深入学习java源码之Math.sin()与 Math.sqrt() native关键字 凡是一种语言,都希望是纯.比如解决某一个方案都喜欢就单单这个语言来写即可.Java平台有个用户和本地C代码进行 ...

  2. 深入学习java源码之Math.addExact()与 Math.multiplyExact()

    深入学习java源码之Math.addExact()与 Math.multiplyExact() ^运算符 或的运算符,其运算规则是: 两个操作数的位中,相同则结果为0,不同则结果为1. int i ...

  3. 深入学习java源码之 Arrays.sort()与Arrays.parallelPrefix()

    深入学习java源码之 Arrays.sort()与Arrays.parallelPrefix() Comparator接口 能对不同类型的对象进行排序(当然排序依据还是基本类型),也不用自己实现排序 ...

  4. 转载:深入学习java源码之Callable.call()与Future.get()

    原始链接:https://blog.csdn.net/qq_35029061/article/details/86750369 深入学习java源码之Callable.call()与Future.ge ...

  5. 如何学习java源码

    刚才在论坛不经意间,看到有关源码阅读的帖子.回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动. 源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心. 说到技术基础,我打个比方吧 ...

  6. java 源码学习,Java源码剖析34讲学习笔记~4

    详解 ThreadPoolExecutor 的参数含义及源码执行流程 前言 在阿里巴巴的开发者手册中针对线程池有如下说明: [强制]线程池不允许使用 Executors 去创建,而是通过 Thread ...

  7. Java源码学习笔记之lang包——包装类Integer.class

    前言:仅为学习所发现而记录. JDK 版本:1.8 同样的,在去除所有方法和静态变量之后,以下为核心内容. public final class Integer extends Number impl ...

  8. Java源码阅读学习后的浅析和感悟(JDK篇)(持续更新)

    目录 Java源码阅读学习后的浅析和感悟(JKD篇) - 为什么阅读源码 集合框架类 - 为什么会要引入集合 - 集合结构图(部分) ArrayList集合源码分析 - 扩容机制 - 关键方法解释(D ...

  9. 面试官系统精讲Java源码及大厂真题 - 01 开篇词:为什么学习本专栏

    01 开篇词:为什么学习本专栏 更新时间:2019-10-30 10:08:31 才能一旦让懒惰支配,它就一无可为. --克雷洛夫 不为了源码而读源码,只为了更好的实践 你好,我是文贺,Java 技术 ...

最新文章

  1. HorizontalTable
  2. java 函数内部类_java 内部类详解 转
  3. 我的世界java版怎么打不开_JAVA版我的世界打不开,求助!
  4. 【字符串处理算法】最长连续字符及其出现次数的算法设计及C代码实现
  5. 2019年自考计算机应用基础(实践),2019年自考计算机应用基础模拟题及答案(8)...
  6. 用函数式编程,从0开发3D引擎和编辑器(三):初步需求分析
  7. python之路 day5
  8. 栈的应用 - 就近匹配
  9. 构建websocket服务
  10. Pyhton-Web框架之【Django】
  11. jdk中ArrayList的实现
  12. Golang web请求
  13. 2021最新显卡天梯图,2021显卡天梯排行榜
  14. FIR滤波器窗函数设计法——汉明窗设计实例
  15. java将输入的阿拉伯数字金额转换为中文大写金额
  16. ToolScanner.java:8: 错误: 编码GBK的不可映射字符 //澹版槑绫? JAVA输出中文乱码
  17. 三菱FX系列PLC简单总结
  18. 转载STM32频谱设计
  19. JQuery是什么?怎么使用JQ?
  20. 一个与众不同的苹果--苹果产品制胜之道

热门文章

  1. 少年: Nginx了解下
  2. 多协议数据采集网关结合TDEngine时序数据库
  3. Linux卸载搜狗输入法
  4. 密码极客经济学博士揭秘,2020年哪个区块链项目最值期待?
  5. 整理2020java面试题
  6. 开发一个游戏项目,需要哪些技术人员
  7. 麒麟操作系统基于linux哪个版本_如今的国产操作系统deepin和优麒麟哪个更好?...
  8. LeetCode 875.爱吃香蕉的珂珂
  9. java selector 源码_Java NIO——Selector机制源码分析---转
  10. VC Socket编程源码