您的位置 首页 java

愉快地学Java语言:第四章数学函数、字符和字符串

导读

本文适合 Java 入门,不太适合Java中高级软件工程师。本文以《Java程序设计基础篇》第10版为蓝本,采用不断提出问题,然后解答问题的方式来讲述。本篇文章只是这个系列中的一篇,如果你喜欢这种讲解方式,或者觉得从中能学到知识,可以关注我,以便查阅本系列其他文章。

让我们开始愉快地学习Java语言吧!

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位十六进制数表示,范围从’ u0000’到’uFFFF’
  • 支持使用世界各种语言所书写的文本的交换、处理和显示
  • Java支持Unicode码

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

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

大多数计算机采用ASCII码

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

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

Unicode码包括ASCII码,从u0000到u007F对应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码为u54c7。

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

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

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

适用于目标变量的含义就是类型匹配。譬如,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。

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

文章来源:智云一二三科技

文章标题:愉快地学Java语言:第四章数学函数、字符和字符串

文章地址:https://www.zhihuclub.com/179490.shtml

关于作者: 智云科技

热门文章

网站地图