1常用数学函数
Math 类中的三角函数方法
例,只举一例,其他的大家可以自己试试。
Math.toDegrees(Math.PI/2)返回值为90,其中Math.PI为常数π。
Math 类中指数函数
例,只举一例,其他的大家可以自己试试。
Math,log(Math.E)返回1.0,其中Math.E表示常数e。
Math类中取整方法
例,只举一例,其他的大家可以自己试试。
Math,round(2.6f)返回3
Math类中计算最大、最小、绝对值的方法
计算随机数
Math.random(),生成大于等于0.且小于1.0的double型随机数。
看下面的截图,大家是不是能发现什么。
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码。
如果要将下面的《倚天屠龙记》中的一句话输出到控制台,该怎么输出呢?
原书摘录一句:这少女姓郭,单名一个襄字,乃大侠郭靖和女侠黄蓉的次女,有个外号叫做“小东邪”。
使用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.
我们发现,还没等运行,编译器就以及提示错误了。
这是为什么呢?
因为上段英文当中含有双引号,输出双引号要使用转义序列。
先不讲转义序列,先说下一个疑问。
上面那段《倚天屠龙记》中摘抄的句子也含有引号,为啥没问题呢?
因为输出中文句子时使用了全角,而输出英文时使用了半角。
那么,上面提到的转义序列是什么呢?
转义序列由反斜杠()后面加上一个字符或者一些数字位组成,用来表示特殊字符。转义序列会被当做一个字符。
看,上面都使用了反斜杠:,我们称它为转义字符。
前文,我们在讲编码时提到一个字符对应一个十进制数,对应一个Unicode编码序列。因为它们是一一对应的,那么它们之间是不是就可以转换了呢?
是的,char型数据可以转换成任意一种数值类型,反之亦然。
整型转换为char
使用整数的低十六位,其余部分都被忽略。
例如,将整数1000000转换为char。
1000000对应的十六进制数为f4240,对应的二进制数据为11110100001001000000,对应的低十六位0100001001000000,它对应的十六进制数为4240。
下面是转换对比结果,完全相同。
将浮点数转换为char
先将浮点值转换成int型,然后将这个整型值转换为char型。
char转换为数值型
字符对应的Unicode码就被转换成某个特定的数值。
例如,将B转换为整型,B在ASCII字符集中对应十进制整数66。
上面都用了显示转换,那么用隐式转换行不行呢?
看似,整型转换为字符隐式转换不行,报语法错误。字符转换为整型可以。
在看下面的例子:
将“哇”转换为byte,哇的Unicode码为哇。
可以看到隐式转换会报错。
那么结论就是:如果转换结果适用于目标变量,就可以使用隐式转换方式;否则,必须使用显式转换方式。
那么什么是适用于目标变量?
适用于目标变量的含义就是类型匹配。譬如,double型数据赋给int型,那么就不叫适用于目标变量。
0~FFFF范围内的任何一个十六进制正整数都可以隐式地转换成字符型数据。不在这个范围内的就必须显示转换。
数值可以执行加减乘除等运算,那么字符型呢?
数值操作符都可以用在char型数据上,如果有个操作数是数字或字符,
那么char型操作数就会被自动转换成一个数字。如果另一个操作数是字符串,字符就会与该字符串相连。
两个数字可以比较,那么两个字符呢?
也可以像比较两个数一样地比较字符。我们可以说一个字符的Unicode值比另一个大或小,或与之相等。
Java的Character类提供一些测试字符的方法
3 String类型
String类型我们称之为i字符串类型,字符串是由多个字符构成的。
前面我们介绍的都是基本类型,而String不是基本类型,它是引用类型,引用类型留到以后再详细介绍。
求字符串的长度:调用String类的length()方法。
字符串也有直接量:如,“java”,用括号括起来的就是字符串直接量。
“”表示空字符串,长多为0。
String的charAt(index)方法用于提取字符。index为字符在字符串中的位置,我们称之为下标,下标从0开始。
String的concat(str)方法用于连接两个字符串,作用等同于使用加号,例如:
+还可以连接字符串和数字,数字会先转换为字符串,然后再拼接。
字符串和布尔类型能不能相加呢?
当然不能,布尔类型没法自动转型为字符串类型。
给大家展示一个神奇的结果:
是不是很奇怪,我们预期的结果可能是:
1和1相等true
1和2不等false
结果却不是这样的,为啥呢?
这是因为,其实System.Out是PrintStream类型,PrintStream类型中定义了好多
重载的println方法,若我们采用上面的写法,那么匹配到的是参数为Object类型的方法。如下图所示:
我们看下效果就一切都明白了:
+=操作也可以用来拼接字符串,那么减等呢?
-=是未定义的操作。此外,>、>=、
要比较两个字符串相等,使用==行不行呢?
怎么字符串直接量可以,但是新new一个就不行呢?
因为字符串直接量是被虚拟机共享的,而使用new新创建一个对象则不被虚拟机共享。
所以,使equals方法是正确的。使用==比较的是对象的引用,也就是数据存放的地址,而不是这个地址对应的值。
这里有些目前比较生疏的概念,以后会慢慢学到。
可以使用substring方法提取子串,例:
可以使用String的indexOf方法查看指定字符或子字符串在字符串中的位置。比较简单,就不举例了。
可以将数值型字符串转换为数值,Integer.parselnt、Double.parseDouble。
还可以将数值转换为字符串,使用+就可以,不过其中一个操作数得是字符串类型。