1常用数学函数

Math 类中的三角函数方法

java 毫秒转 日期 保留 毫秒值 java毫秒转天数_字符串


例,只举一例,其他的大家可以自己试试。

Math.toDegrees(Math.PI/2)返回值为90,其中Math.PI为常数π。

Math 类中指数函数


java 毫秒转 日期 保留 毫秒值 java毫秒转天数_字符串_02


例,只举一例,其他的大家可以自己试试。

Math,log(Math.E)返回1.0,其中Math.E表示常数e。

Math类中取整方法


java 毫秒转 日期 保留 毫秒值 java毫秒转天数_java 毫秒转 日期 保留 毫秒值_03


例,只举一例,其他的大家可以自己试试。

Math,round(2.6f)返回3

Math类中计算最大、最小、绝对值的方法


java 毫秒转 日期 保留 毫秒值 java毫秒转天数_java 毫秒转 日期 保留 毫秒值_04


计算随机数

Math.random(),生成大于等于0.且小于1.0的double型随机数。

看下面的截图,大家是不是能发现什么。


java 毫秒转 日期 保留 毫秒值 java毫秒转天数_java怎么把毫秒转换成天数_05


Math在package java.lang;中,但是我们却没有引入此包,为啥呢?

在一个Java程序中,java.lang包中的所有类是隐式导人的。

2字符类型和操作

字符数据类型char,表示单个字符,字符直接量要用单引号括起来。注意是单引号,用双引号括起来的是字符串直接量,字符串我们稍后介绍。

大家可还记得,计算机存储的都是二进制数,我们要将十进制的数转换成二进制才可以将其存储到计算机里。那么字符怎么转换呢?

大家这样想,要是将每一个字符都和数字一一对应起来,数字是可以转换为二进制形式的,那么等同于将字符转换为二进制形式。

通过上面的论述,是不是能给编码下个定义了呢?

编码的定义就是将字符映射到它的二进制形式的过程。

编码也有多种不同的方式。

Unicode码

  • 开始被设计为 16 位的字符编码,但16位的编码只能表示65536个字符,因此, Unicode标准被扩展为1112064个字符。
  • —个16位Unicode码占两个字节,用以u开头的4位十六进制数表示,范围从’ ’到’’
  • 支持使用世界各种语言所书写的文本的交换、处理和显示
  • Java支持Unicode码

例如,’0’~’9’,对应的十进制值为48~57,对应的Unicode码为0~9

ASCII 码(美国标准信息交换码)

大多数计算机采用ASCII码

表示所有大小写字母、数字、标点符号和控制字符的8位编码表。

Unicode码和ASCII码有什么联系吗?

Unicode码包括ASCII码,从 到对应128个ASCII码。

如果要将下面的《倚天屠龙记》中的一句话输出到控制台,该怎么输出呢?

原书摘录一句:这少女姓郭,单名一个襄字,乃大侠郭靖和女侠黄蓉的次女,有个外号叫做“小东邪”。


java 毫秒转 日期 保留 毫秒值 java毫秒转天数_字符串_06


使用System.out.println()输出没问题。

再看下面这段从HBase官方文档中摘录的一句话:

This is what makes HBase "sparse." A tabular view is not the only possible way to look at data in HBase, or even the most accurate.


java 毫秒转 日期 保留 毫秒值 java毫秒转天数_字符串_07


我们发现,还没等运行,编译器就以及提示错误了。

这是为什么呢?

因为上段英文当中含有双引号,输出双引号要使用转义序列。

先不讲转义序列,先说下一个疑问。

上面那段《倚天屠龙记》中摘抄的句子也含有引号,为啥没问题呢?

因为输出中文句子时使用了全角,而输出英文时使用了半角。

那么,上面提到的转义序列是什么呢?

转义序列由反斜杠()后面加上一个字符或者一些数字位组成,用来表示特殊字符。转义序列会被当做一个字符。


java 毫秒转 日期 保留 毫秒值 java毫秒转天数_Math_08


看,上面都使用了反斜杠:,我们称它为转义字符。

前文,我们在讲编码时提到一个字符对应一个十进制数,对应一个Unicode编码序列。因为它们是一一对应的,那么它们之间是不是就可以转换了呢?

是的,char型数据可以转换成任意一种数值类型,反之亦然。

整型转换为char

使用整数的低十六位,其余部分都被忽略。

例如,将整数1000000转换为char。

1000000对应的十六进制数为f4240,对应的二进制数据为11110100001001000000,对应的低十六位0100001001000000,它对应的十六进制数为4240。

下面是转换对比结果,完全相同。


java 毫秒转 日期 保留 毫秒值 java毫秒转天数_ico_09


将浮点数转换为char

先将浮点值转换成int型,然后将这个整型值转换为char型。

char转换为数值型

字符对应的Unicode码就被转换成某个特定的数值。

例如,将B转换为整型,B在ASCII字符集中对应十进制整数66。


java 毫秒转 日期 保留 毫秒值 java毫秒转天数_java怎么把毫秒转换成天数_10


上面都用了显示转换,那么用隐式转换行不行呢?


java 毫秒转 日期 保留 毫秒值 java毫秒转天数_java 毫秒转 日期 保留 毫秒值_11


java 毫秒转 日期 保留 毫秒值 java毫秒转天数_Math_12


看似,整型转换为字符隐式转换不行,报语法错误。字符转换为整型可以。

在看下面的例子:

将“哇”转换为byte,哇的Unicode码为哇。


java 毫秒转 日期 保留 毫秒值 java毫秒转天数_Math_13


可以看到隐式转换会报错。

那么结论就是:如果转换结果适用于目标变量,就可以使用隐式转换方式;否则,必须使用显式转换方式。

那么什么是适用于目标变量?

适用于目标变量的含义就是类型匹配。譬如,double型数据赋给int型,那么就不叫适用于目标变量。

0~FFFF范围内的任何一个十六进制正整数都可以隐式地转换成字符型数据。不在这个范围内的就必须显示转换。

数值可以执行加减乘除等运算,那么字符型呢?

数值操作符都可以用在char型数据上,如果有个操作数是数字或字符,

那么char型操作数就会被自动转换成一个数字。如果另一个操作数是字符串,字符就会与该字符串相连。

两个数字可以比较,那么两个字符呢?

也可以像比较两个数一样地比较字符。我们可以说一个字符的Unicode值比另一个大或小,或与之相等。

Java的Character类提供一些测试字符的方法


java 毫秒转 日期 保留 毫秒值 java毫秒转天数_ico_14


3 String类型

String类型我们称之为i字符串类型,字符串是由多个字符构成的。

前面我们介绍的都是基本类型,而String不是基本类型,它是引用类型,引用类型留到以后再详细介绍。

求字符串的长度:调用String类的length()方法。

字符串也有直接量:如,“java”,用括号括起来的就是字符串直接量。

“”表示空字符串,长多为0。

String的charAt(index)方法用于提取字符。index为字符在字符串中的位置,我们称之为下标,下标从0开始。

String的concat(str)方法用于连接两个字符串,作用等同于使用加号,例如:


java 毫秒转 日期 保留 毫秒值 java毫秒转天数_字符串_15


+还可以连接字符串和数字,数字会先转换为字符串,然后再拼接。

字符串和布尔类型能不能相加呢?

当然不能,布尔类型没法自动转型为字符串类型。

给大家展示一个神奇的结果:


java 毫秒转 日期 保留 毫秒值 java毫秒转天数_字符串_16


是不是很奇怪,我们预期的结果可能是:

1和1相等true

1和2不等false

结果却不是这样的,为啥呢?

这是因为,其实System.Out是PrintStream类型,PrintStream类型中定义了好多

重载的println方法,若我们采用上面的写法,那么匹配到的是参数为Object类型的方法。如下图所示:


java 毫秒转 日期 保留 毫秒值 java毫秒转天数_字符串_17


我们看下效果就一切都明白了:


java 毫秒转 日期 保留 毫秒值 java毫秒转天数_字符串_18


+=操作也可以用来拼接字符串,那么减等呢?


java 毫秒转 日期 保留 毫秒值 java毫秒转天数_java 毫秒转 日期 保留 毫秒值_19


-=是未定义的操作。此外,>、>=、

要比较两个字符串相等,使用==行不行呢?


java 毫秒转 日期 保留 毫秒值 java毫秒转天数_java 毫秒转 日期 保留 毫秒值_20


怎么字符串直接量可以,但是新new一个就不行呢?

因为字符串直接量是被虚拟机共享的,而使用new新创建一个对象则不被虚拟机共享。

所以,使equals方法是正确的。使用==比较的是对象的引用,也就是数据存放的地址,而不是这个地址对应的值。

这里有些目前比较生疏的概念,以后会慢慢学到。

可以使用substring方法提取子串,例:


java 毫秒转 日期 保留 毫秒值 java毫秒转天数_字符串_21


可以使用String的indexOf方法查看指定字符或子字符串在字符串中的位置。比较简单,就不举例了。

可以将数值型字符串转换为数值,Integer.parselnt、Double.parseDouble。

还可以将数值转换为字符串,使用+就可以,不过其中一个操作数得是字符串类型。


java 毫秒转 日期 保留 毫秒值 java毫秒转天数_java怎么把毫秒转换成天数_22