一、基本数据类型
Java 是一种强类型语言,因此必须为每一个变量声明一种类型。在Java中,一共有8中基本数据类型,其中有4种整型,2种浮点型,一种字符类型char(用于表示Unicode编码的代码单元)和一种用于表示真值得boolean类型
1.整型
类型 | 存储需求 | 取值范围 |
int | 4字节 | -2147483648 ~ 2147483647(刚超过20亿) |
short | 2字节 | -32768 ~ 32767 |
long | 8字节 | -9223372036854775808 ~ 9223372036854775807 |
byte | 1字节 | -128 ~ 127 |
在Java中,整型的范围与运行的Java平台无关。这就解决了软件从一个平台移植到另一个平台,或者在同一个平台中不同操作系统之间进行移植给程序带来的诸多问题。C或者C++程序会根据不同的处理器选择最为高效的整型,这样会造成一个在32位处理器上运行的C程序,在16位系统上 运行时却发生整型溢出。
长整型有一个后缀L或者l(如40000000L)。十六进制数值有一个前缀0X或者0x(如0xCAEE)。八进制有一个前缀0,例如010对应十进制中的8。很显然,八进制表示法比较容易混淆,所以建议不使用8进制。
从Java7开始,加上前缀0b或者0B开始就可以写二进制数。例如,0b1001就是9,。另外从Java7开始,可以为数字字面量下面加下划线,如用1_000_000(或者0b1111_0100_0010_0100_0000)表示100万。加下划线的目的是为了让数据更容易被读。Java编译器会去除下划线。
2.浮点型
类型 | 存储需求 | 取值范围 |
float | 4字节 | 大约±3.402 823 47E+38F(有效位数为6~7位) |
double | 8字节 | 大约±1.797 693 134 862 315 70E+308(有效位数为15位) |
float类型的数值有一个后缀F或者f (例如3.14F)。没有后缀的F的浮点数值(如3.14)总是默认为double类型。也可以在浮点数值后面添加D或者d(例如3.14D)。
所有的浮点值计算都遵循IEEE 754规范。用于表示浮点数值计算出错和溢出的情况的三个特殊的浮点数值分别为
- 正无穷大
- 负无穷大
- NaN(不是一个数字 )
Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY,Double.NaN,分别表示上面对应的数值,FLoat类型也是。
通过查看API可以知道
Double.POSITIVE_INFINITY = 1.0 / 0.0;
Double.NEGATIVE_INFINITY = -1.0 / 0.0
Double.NaN = 0.0d / 0.0
所有非数值的值于Double.NaN相比较都不为真,如果要判断当前数值是不是一个数字,则可以用Double.isNaN(x)来判断。
3.char类型
char类型原本用于表示单个字符。不过现在情况有些变化,如今,有些unicode字符可以用一个char值表示,另外一些unicode字符需要两个char值。Java中char数据长度为2个字节。
转义序列 | 名称 | Unicode值 |
\b | 退格 | \u0008 |
\t | 制表 | \u0009 |
\n | 换行 | \u000a |
\r | 回车 | \u000d |
\" | 双引号 | \u0022 |
\' | 单引号 | \u0027 |
\\ | 反斜杠 | \u005c |
Unicode转义序列会在解析 代码之前处理,例如 String temp = “\u0022+\u0022”,其结果并不是一个由引号包围加号构成的字符串。实际上\u0022会在解析之前转换成“,因此temp会得到““+””,即temp为空字符串 ,temp =""。在java注释中药格外注意\u产生的错误。例如:注释 // look inside c:\users,编译程序时会爆java.lang.Error: Unresolved compilation problems: Invalid unicode,的异常错误,因为\u后面并没有跟着4位十六进制数。
4.boolean 类型
boolean,类型有两个值,false 和ture,用来判断逻辑条件。整型值和布尔值不能进行相互转换。
5.变量、常量
java 中变量的声明可以在代码中的任何一个地方。java 中用final关键字修饰变量,表示这个变量只能被赋值一次,即为常量。
二、算数运算符
在java 中,使用算术运算符+ 、-、 *、 /表示加减乘除运算。当参与运算的两个操作数都是整数时,表示整数除法,否则表示浮点除法。整数的求余操作(取模)用%表示。整数被0除会产生一个异常,而浮点数被0除会得到无穷大或者NaN结果。
虚拟机设计者允许对中间计算结果采用扩展精度,即截断。但是对于使用strictfp关键字标记的方法或者类,不许使用严格的浮点计算来生成可再生的结果。
三、数学函数与常量
1.Math的静态方法
Math.sqrt(x):用于计算x的平方根
Math.pow(x,a):用于计算x的a次幂,powf方法有两个double类型的参数,其返回值也为double
常用三角函数
Math.sin()
Math.cos()
Math.tan()
Math.atan()
Math.atan2()
指数函数
Math.exp
Math.log
Math.log10
常量:Math.PI,Math.E 用于表示π和e的最接近的近似值。
Math类提供了一些方法使整数有更好的运算安全性。如果一个计算溢出, 数学运算符只是悄悄的返回错误的结果,而不做任何的提醒。例如10亿乘以3的计算结果为-1294967296。因为int类型最大的值也是刚刚超过20亿。Math提供了一系列抛出异常的方法进行计算,保证计算结果不会出错。
Math.multiplyExact()相乘
Math.addExact()相加
Math.subtractExact() 相减
Math.incrementExact() 自增
Math.decrementExact() 自减
Math.negateExact( )取反
2.运算符的优先级
运算符 | 结合性 |
[] .()(方法调用) | 从左向右 |
! ~ ++ -- +(一元运算) -(一元运算) ()强制类型转换) new | 从右向左 |
* / % | 从左向右 |
+ - | 从左向右 |
<< >> >>> | 从左向右 |
< <= > >= instanceof | 从左向右 |
== != | 从左向右 |
& | 从左向右 |
^ | 从左向右 |
| | 从左向右 |
&& | 从左向右 |
|| | 从左向右 |
? : | 从左向右 |
= += -= *= /= %= &= |= ^= <<= >>= >>>= | 从右向左 |
本文章内容摘抄自Java核心技术卷I,作为java知识记录