深入学习java源码之Math.max()与 Math.min()
深入学习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)
返回两个 |
static float
|
max(float a, float b)
返回两个 |
static int
|
max(int a, int b)
返回两个 |
static long
|
max(long a, long b)
返回两个 |
static double
|
min(double a, double b)
返回两个 |
static float
|
min(float a, float b)
返回两个 |
static int
|
min(int a, int b)
返回两个 |
static long
|
min(long a, long b)
返回两个 |
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()相关推荐
- Math源码java_深入学习java源码之Math.sin()与 Math.sqrt()
深入学习java源码之Math.sin()与 Math.sqrt() native关键字 凡是一种语言,都希望是纯.比如解决某一个方案都喜欢就单单这个语言来写即可.Java平台有个用户和本地C代码进行 ...
- 深入学习java源码之Math.addExact()与 Math.multiplyExact()
深入学习java源码之Math.addExact()与 Math.multiplyExact() ^运算符 或的运算符,其运算规则是: 两个操作数的位中,相同则结果为0,不同则结果为1. int i ...
- 深入学习java源码之 Arrays.sort()与Arrays.parallelPrefix()
深入学习java源码之 Arrays.sort()与Arrays.parallelPrefix() Comparator接口 能对不同类型的对象进行排序(当然排序依据还是基本类型),也不用自己实现排序 ...
- 转载:深入学习java源码之Callable.call()与Future.get()
原始链接:https://blog.csdn.net/qq_35029061/article/details/86750369 深入学习java源码之Callable.call()与Future.ge ...
- 如何学习java源码
刚才在论坛不经意间,看到有关源码阅读的帖子.回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动. 源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心. 说到技术基础,我打个比方吧 ...
- java 源码学习,Java源码剖析34讲学习笔记~4
详解 ThreadPoolExecutor 的参数含义及源码执行流程 前言 在阿里巴巴的开发者手册中针对线程池有如下说明: [强制]线程池不允许使用 Executors 去创建,而是通过 Thread ...
- Java源码学习笔记之lang包——包装类Integer.class
前言:仅为学习所发现而记录. JDK 版本:1.8 同样的,在去除所有方法和静态变量之后,以下为核心内容. public final class Integer extends Number impl ...
- Java源码阅读学习后的浅析和感悟(JDK篇)(持续更新)
目录 Java源码阅读学习后的浅析和感悟(JKD篇) - 为什么阅读源码 集合框架类 - 为什么会要引入集合 - 集合结构图(部分) ArrayList集合源码分析 - 扩容机制 - 关键方法解释(D ...
- 面试官系统精讲Java源码及大厂真题 - 01 开篇词:为什么学习本专栏
01 开篇词:为什么学习本专栏 更新时间:2019-10-30 10:08:31 才能一旦让懒惰支配,它就一无可为. --克雷洛夫 不为了源码而读源码,只为了更好的实践 你好,我是文贺,Java 技术 ...
最新文章
- HorizontalTable
- java 函数内部类_java 内部类详解 转
- 我的世界java版怎么打不开_JAVA版我的世界打不开,求助!
- 【字符串处理算法】最长连续字符及其出现次数的算法设计及C代码实现
- 2019年自考计算机应用基础(实践),2019年自考计算机应用基础模拟题及答案(8)...
- 用函数式编程,从0开发3D引擎和编辑器(三):初步需求分析
- python之路 day5
- 栈的应用 - 就近匹配
- 构建websocket服务
- Pyhton-Web框架之【Django】
- jdk中ArrayList的实现
- Golang web请求
- 2021最新显卡天梯图,2021显卡天梯排行榜
- FIR滤波器窗函数设计法——汉明窗设计实例
- java将输入的阿拉伯数字金额转换为中文大写金额
- ToolScanner.java:8: 错误: 编码GBK的不可映射字符 //澹版槑绫? JAVA输出中文乱码
- 三菱FX系列PLC简单总结
- 转载STM32频谱设计
- JQuery是什么?怎么使用JQ?
- 一个与众不同的苹果--苹果产品制胜之道