版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第 章 数据类型和运算符内容提要 每种语言都有它所支持的数据类型、运算符和控制结构。Java语言中既有基本数据类型,又有引用数据类型,同时支持丰富的运算符。本章要点 本章将介绍Java语言的数据类型和各种运算符的使用,为后续章节的学习打下基础。学习本章后,应该掌握Java语言的数据类型并能正确使用运算符。2.1 简单程序的开发 编写程序涉及设计算法和将算法转换成代码两个步骤。算法描述了如何解决问题和解决问题的步骤。算法可以使用自然语言或伪代码(自然语言和编程语言的混合)描述。例如,对求圆面积的问题可以描述如下:2.1 简单程序的开发 编写代码就是将算法转换成程序。在Java程序中首先定义一个C
2、omputeArea类,其中定义main()方法,如下所示:2.1 简单程序的开发 首先我们应该定义两个变量来存储半径和面积。 变量代表内存中存储数据和计算结果的位置,每个变量需要指定其存储的数据类型和名称。double是数据类型,radius和area是变量名。在程序中通过变量名操纵变量值。变量名应尽量使用有意义的名称。 2.1 简单程序的开发 要从键盘读取数据可以使用Scanner类的nextInt()或nextDouble()方法。首先创建Scanner类的一个实例,然后调用nextDouble()方法读取double数据:2.1 简单程序的开发 程序2.1 ComputeArea.ja
3、vaRun2.1 简单程序的开发 由于Scanner类存放在java.util包中,因此程序使用import语句导入该类。在main()方法中使用Scanner类的构造方法创建了一个Scanner类的一个对象,在其构造方法中以标准输入System.in作为参数。得到Scanner对象后,就可以调用它的有关方法来获得各种类型的数据。程序中使用nextDouble()方法得到一个浮点型数据,然后将其赋给double型变量radius。最后输出语句输出以该数为半径的圆的面积。程序中圆周率使用Math类的PI常量。2.2 数据类型 在程序设计中,数据是程序的必要组成部分,也是程序处理的对象。不同的数据
4、有不同的类型,不同的数据类型有不同的数据结构、不同的存储方式,并且参与的运算也不同。2.2.1 Java数据类型数据类型 Java语言的数据类型可分为:2.2.1 Java数据类型数据类型基本数据类型整数类型字节型byte短整型short整型int长整型long浮点类型单浮点型float双浮点型double布尔类型boolean字符类型char引用数据类型数组name 、类class、接口interface、枚举类型enum、注解类型interface2.2.1 Java数据类型数据类型1. 基本数据类型 Java语言还有void类型,它主要用于指定方法的返回值。数据类型占字节数所占位数数的范
5、围boolean11只有true和false两个值byte18-2727-1short216-215215-1int432-231231-1long864-263263-1char216065 535float4323.4e-0383.4e+038double8641.7e-3081.7e+3082.2.1 Java数据类型数据类型2. 变量及赋值 变量(variable)是在程序运行中其值可以改变的量。一个变量应该有一个名字,在内存中占据一定的存储单元。Java有两种类型的变量:基本类型的变量和引用类型的变量。基本类型的变量包括数值型(整数型和浮点型)、布尔型和字符型。引用类型变量包括类、接
6、口、枚举和数组等。 变量在使用之前必须定义,变量的定义包括变量的声明和赋值。2.2.1 Java数据类型数据类型 变量声明的一般格式为: 其中,modifier为变量的访问修饰符、 type为变量的类型、varName为变量名。下面声明了几个不同类型的变量。2.2.1 Java数据类型数据类型 使用赋值运算符“=”给变量赋值,一般称为变量的初始化。如下是几个赋值语句。 也可以在声明变量的同时给变量赋值,例如:2.2.1 Java数据类型数据类型3.常量和字面量 常量(constant)是在程序运行过程中,其值不能被改变的量。常量实际是一个由final关键字修饰的变量,一旦为其赋值,其值在程序运
7、行中就不能被改变。例如,下面定义了几个常量:2.2.1 Java数据类型数据类型 常量可以在声明的同时赋值,也可以声明后赋值。一旦赋值便不允许修改。 字面量(literals)是某种类型值的表示形式,字面量有三种类型:基本类型的字面量、字符串字面量以及null字面量。基本类型的字面量有4种类型:整数型、浮点型、布尔型、字符型。如123、-789为整型字面量,3.456、2e3为浮点型字面量,true、false为布尔型字面量,g、我为字符字面量。2.2.2 整数类型整数类型 Java语言提供了4种整数类型,分别是字节型(byte)、短整型(short)、整型(int)和长整型(long)。这些
8、整数类型都是有符号数,可以为正值或负值。每种类型的整数在JVM中占的位数不同,因此能够表示的数的范围也不同。 不要把整数类型的宽度理解成实际机器的存储空间,一个byte型的数据可能使用32位存储。2.2.2 整数类型整数类型 Java的整型字面量有4种表示形式: 整型字面量具有int类型,在JVM中占32位。对于long型值,可以在后面加上l或L,如125L,它在JVM中占64位。2.2.2 整数类型整数类型 Java的整型变量使用byte、short、int、long等声明,下面是整型变量的定义: 在给变量赋值时,不能超出该数据类型所允许的范围,否则编译器给出错误提示。2.2.2 整数类型整
9、数类型 编译错误说明类型不匹配,不能将一个int型的值转换成byte型值。因为200超出了byte型数据的范围(-128127),因此编译器拒绝编译。2.2.2 整数类型整数类型 在表示较大的整数时,可能需要用到长整型long。例如下面程序计算一光年的距离。 程序2.2 LightYear.javaRun2.2.2 整数类型整数类型 程序运行结果如下: 一光年的距离是9460800000000公里。 如果把该程序的变量seconds和distance的类型声明为int类型,编译不会出现错误,但结果不正确。2.2.3 浮点型浮点型 浮点型的数就是通常所说的实数。在Java中有两种浮点类型的数据:
10、float型和double型。这两种类型的数据在JVM中所占的位数不同,float型占32位,double型占64位。因此,通常将float型称为单精度浮点型,将double型称为双精度浮点型。它们符合IEEE-754标准。2.2.3 浮点型浮点型 浮点数运算不会因溢出而导致异常。如果下溢,则结果为0,如果上溢,结果为正无穷大或负无穷大(显示标识符为Infinity或-Infinity)。此外若出现没有数学意义的结果,Java用NaN(Not a Number)表示,如0.0/0.0的结果为NaN。这些常量已在基本数据类型包装类中定义。 浮点型变量定义用float和double关键字。2.2.
11、3 浮点型浮点型 浮点型常量默认的类型是double型数据。如果表示float型常量数据,必须在后面加上F或f,double型数据也可加D或d。2.2.3 浮点型浮点型 下面程序定义了几个数值型变量,并输出其值。 程序2.3 NumberDemo.java Run2.2.3 浮点型浮点型 如果一个数值字面量太长,读起来会比较困难。因此,从Java 7开始,对数值型字面量的表示可以使用下划线(_)将一些数字进行分组,这可以增强代码的可读性。下划线可以用在浮点型数和整型数(包括二进制、八进制、十六进制和十进制)的表示中。下面是一些使用下划线的例子:2.2.3 浮点型浮点型 在数值字面值中使用下划线
12、对数据的内部表示和显示没有影响。例如: 在数值字面量中使用下划线只是提高代码的可读性,编译器将忽略所有的下划线。另外,下划线不能放在数值的最前面和最后面,也不能放在浮点数小数点的前后。2.2.4 字符型字符型 Java语言使用Unicode(统一码)为字符编码,它是由Unicode Consortium建立的一种编码方案。Unicode字符集最初使用两个字节(16位)为字符编码,这样就可表示65 536个字符。新版Unicode 4.0标准使用UTF-16为字符编码,可以表示更多的字符,它可以表示世界各国的语言符号,包括希腊语、阿拉伯语、日语以及汉语等。ASCII码字符集是Unicode字符集
13、子集。2.2.4 字符型字符型 字符型字面量用单引号将字符括起来,大多数可见的Unicode码字符都可用这种方式表示,如a、我等。对于不能用单引号直接括起来的符号,需要使用转义序列来表示。表示方法是用反斜杠()表示转义。转义字符说 明转义字符说 明单引号字符b退格双引号字符r回车反斜杠字符n换行f换页t水平制表符ddd3位八进制数表示的字符 uxxxx4位十六进制数表示的字符2.2.4 字符型字符型 在Java程序中用3位八进制数表示字符的格式为ddd,如141表示字符a。也可以用4位十六进制数表示字符,格式为uxxxx,如u0062表示字符b,u4F60和u597D分别表示中文的“你”和“好
14、”。任何Unicode字符都可用这种方式表示。 字符型变量使用char定义,在内存中占16位,表示的数据范围是065535。如:2.2.4 字符型字符型 Java字符型数据实际上是int型数据一个子集,可以与其他数值型数据混合运算。但字符型数据不能与int型数据直接相互转换。一般情况下,char类型的数据可直接转换为int类型的数据,而int类型的数据转换成char类型的数据需要强制转换。如:2.2.5 布尔型数据布尔型数据 布尔型数据用来表示逻辑真或逻辑假。布尔型常量很简单,只有两个值true和false,分别用来表示逻辑真和逻辑假。 布尔型变量使用boolean关键字声明,如下面语句声明了
15、布尔型变量t并为其赋初值true: 所有关系表达式的返回值都是布尔型的数据,如表达式10 大于=大于等于=等于小于!=不等于2.3.2 关系运算符关系运算符 关系运算符一般用来构成条件表达式,比较的结果返回true或false。假设定义了下面的变量: 下面的表达式的返回值都是true。2.3.2 关系运算符关系运算符 在Java语言中,任何类型的数据(包括基本类型和引用类型)都可以用“=”和“!=”比较是否相等,但只有基本类型的数据(布尔型数据除外)可以比较哪个大哪个小。比较结果通常作为判断条件,例如:2.3.3 位运算符位运算符 位运算有两类:位逻辑运算(bitwise)和移位运算(shif
16、t)。位逻辑运算符包括按位取反()、按位与(&)、按位或(|)和按位异或()4种。移位运算符包括左移()和无符号右移()3种。位运算符只能用于整型数据,包括byte、short、int、long和char类型。设a = 10, b = 3,下表列出了各种位运算符的功能与示例。2.3.3 位运算符位运算符运算符功 能示 例结 果按位取反 a-11&按位与a & b2|按位或a | b11按位异或a b9按位左移a 按位右移a b1按位无符号右移a b12.3.3 位运算符位运算符 在Java语言中,整数是用补码表示的。在补码表示中,最高位为符号位,正数的符号位为0,负数的
17、符号位为1。若一个数为正数,补码与原码相同;若一个数为负数,补码为原码的反码加1。 例如,+ 42的补码为: - 42的补码为:2.3.3 位运算符位运算符1. 位逻辑运算符 位逻辑运算是对一个整数的二进制位进行运算。设A、B表示操作数中的一位,位逻辑运算的规则如表所示。ABAA&BA|BAB0010000110111000111101102.3.3 位运算符位运算符 运算符是对运算数的每一位按位取反。例如, 42的结果为- 43。因为42的二进制补码为:00000 00000,按位取反后结果为11111111 1111111 11111111 11010101,即为- 43。对任意一
18、个整型数i,都有等式成立: 再看以下按位与运算。2.3.3 位运算符位运算符 上面代码的输出结果为: 如果两个操作数宽度(位数)不同,在进行按位运算时要进行扩展。例如一个int型数据与一个long型数据按位运算,先将int型数据扩展到64位,若为正,高位用0扩展,若为负,高位用1扩展,然后再进行位运算。2.3.3 位运算符位运算符2. 移位运算符 Java语言提供了3个移位运算符:左移运算符()和无符号右移运算符()。 左移运算符()用来将一个整数的二进制位序列左移若干位。移出的高位丢弃,右边添0。例如,整数7的二进制序列为: 若执行7 )用来将一个整数的二进制位序列右移若干位。移出的低位丢弃
19、。若为正数,移入的高位添0,若为负数,移入的高位添1。 无符号右移运算符()也是将一个整数的二进制位序列右移若干位。它与右移运算符的区别是,不论正数还是负数左边一律移入0。例如,-192的二进制序列为: 若执行-192 3,结果为-24。 若执行-192 3,结果为536870888。2.3.4 逻辑运算符逻辑运算符 逻辑运算符的运算对象只能是布尔型数据,并且运算结果也是布尔型数据。逻辑运算符包括以下几种:逻辑非(!)、短路与(&)、短路或(|)、逻辑与(&)、逻辑或(|)、逻辑异或()。假设A、B是两个逻辑型数据,则逻辑运算的规则如表所示。2.3.4 逻辑运算符逻辑运算符 对
20、一个逻辑值A,逻辑非(!)运算是当A为true时,!A的值为false,当A的值为false,!A的值为true。AB!AA&BA|BABA&BA|Bfalsefalsetruefalsefalsefalsefalsefalsefalsetruetruefalsetruetruefalsetruetruefalsefalsefalsetruetruefalsetruetruetruefalsetruetruefalsetruetrue2.3.4 逻辑运算符逻辑运算符 对逻辑“与”(&或&)和逻辑“或”(|或|)运算都有两个运算符,它们的区别是:“&”和“
21、|”为短路运算符,而“&”和“|”为非短路运算符。对短路运算符,当使用“&”进行“与”运算时,若第一个操作数的值为false时,就可以判断整个表达式的值为false,因此,不再继续求解第二个表达式的值。2.3.4 逻辑运算符逻辑运算符 同样当使用“|”进行“或”运算时,若第一个操作数的值为true时,就可以判断整个表达式的值为true,不再继续求解第二个表达式的值。 对非短路运算符(&和|),将对运算符左右的表达式求解,最后计算整个表达式的结果。2.3.4 逻辑运算符逻辑运算符 程序2.6 LogicalDemo.java Run2.3.5 赋值运算符赋值运算符 赋值运
22、算符(assignment operator)用来为变量指定新值。赋值运算符主要有两类,一类是使用等号(=)赋值,它把一个表达式的值赋给一个变量或对象;另一类是扩展的赋值运算符。2.3.5 赋值运算符赋值运算符1. 赋值运算符 赋值运算符“=”的一般格式为: 这里,variableName为变量名,expression为表达式。其功能是将等号右边表达式的值赋给左边的变量。例如:2.3.5 赋值运算符赋值运算符 赋值运算必须是类型兼容的,即左边的变量必须能够接受右边的表达式的值,否则会产生编译错误。如下面的语句会产生编译错误。 因为3.14是double型数据,不能赋给整型变量,因为可能丢失精度
23、。编译器的错误提示是:Type mismatch:cannot convert double to int。2.3.5 赋值运算符赋值运算符 使用等号(=)可以给对象赋值,这称为引用赋值。将右边对象的引用值(地址)赋给左边的变量,这样,两个变量地址相同,即指向同一对象。如: 此时d1、d2指向同一个对象。对象引用赋值与基本数据类型的拷贝赋值是不同的。2.3.5 赋值运算符赋值运算符2. 扩展赋值运算符 在赋值运算符(=)前加上其他运算符,即构成扩展赋值运算符。它的一般格式为: 这里op为运算符,其含义是将变量variableName 的值与expression的值做op运算,结果赋给varia
24、bleName 。例如,下面两行是等价的:2.3.5 赋值运算符赋值运算符 扩展赋值运算符有11个,设a = 15, b = 3,下表给出了所有的扩展的赋值运算符及其使用方法。扩展赋值运算符表达式等价表达式结 果+=a += ba = a + b18-=a -= ba = a - b12*=a *= ba = a * b45/=a /= ba = a / b5%=a %= ba = a % b0&=a &= ba =a & b3|=a |= ba = a | b15=a = ba = a b12=a = ba = a =a = ba = a b1=a = ba = a
25、b12.3.6 运算符的优先级和结合性运算符的优先级和结合性 运算优先级是指在一个表达式中出现多个运算符又没有用括号分隔时,先运算哪个后运算哪个。不同的运算符有不同的运算优先级。 结合性是指对某个运算符构成的表达式,计算时如果先取运算符左边的操作数,然后取运算符,则该运算符是左结合的,若先取运算符右侧的操作数,后取运算符,则是右结合的。赋值运算符就是右结合的2.3.6 运算符的优先级和结合性运算符的优先级和结合性优先级运算符名 称结合性1+- +, - !(cast)自增自减正、负按位取反逻辑非类型转换右结合2*, /, %乘、除和求余左结合3+, -+加、减字符串连接左结合4, 左移、右移、
26、无符号右移左结合5, , =, instanceof小于、小于等于、大于、大于等于、实例运算符左结合6= !=相等、不相等左结合7& 按位与、逻辑与左结合8 按位异或、逻辑异或左结合9|按位或、逻辑或左结合10& 逻辑与(短路)左结合11|逻辑或(短路)左结合12? :条件运算符右结合13=+=,-=,*=,/=,%=赋值扩展赋值右结合2.3.6 运算符的优先级和结合性运算符的优先级和结合性 无需死记硬背运算符的优先级。必要时可以在表达式中使用圆括号,圆括号的优先级最高。例如,考虑以下代码: 因为“*”和“+”的优先级比“=”高,比较运算之后,z的值是true。这个表达式的可读
27、性较差。使用圆括号修改如下:2.4 数据类型转换 通常整型、实型、字符型数据可能需要混合运算或相互赋值,这就涉及类型转换的问题。Java语言是强类型的语言,即每个常量、变量、表达式的值都有固定的类型,而且每种类型都是严格定义的。在Java程序编译阶段,编译器要对类型进行严格的检查,任何不匹配的类型都不能通过编译器。比如在C/C+中可以把浮点型的值赋给一个整型变量,在Java中这是不允许的。如果一定要把一个浮点型的值赋给一个整型变量,需要进行类型转换。 在Java中,基本数据类型的转换分为自动类型转换和强制类型转换两种。2.4.1 自动类型转换自动类型转换 自动类型转换也称加宽转换,它是指将具有较少位数的数据类型转换为具有较多位数的数据类型。例如: 将byte型变量b的值赋给int型变量i,这是合法的,因为int型数据占的位数多于byte型数据占的位数,这就是自动类型转换。2.4.1 自动类型转换自动类型转换 以下类型之间允许自动转换:2.4.1 自动类型转换自动类型转换 从一种整数类型扩大转换到另一种整数类型时,不会有信息丢失的危险。同样,从float转换为double也不会丢失信息。但从int或long转换为float,从long转换为double可能发生信息丢失。 例如,下面代码的输出就丢失了精度。2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年汉中市汽车运输集团有限公司招聘(48人)笔试历年典型考点题库附带答案详解
- 药品管理法及实施条例培训试题测试卷附答案
- 2026电子计算机基础考试题及答案
- 2026电压电阻中考试题及答案
- 2026电算化UFO报表考试题库及答案
- 2026电商会计考试题目及答案
- 2026电缆考试题及答案
- 渣土运输车辆违规处罚方案
- 《货币银行学》《金融学》期末考试题库及答案
- 马工程社会学概论题库及答案
- 施工机械设备应急抢修保障措施
- Vensim中文学习手册
- 中国电信2024年燎原计划跨省联训(AI专业)考试含答案
- 人教精通版小学英语3-6年级单词词汇表
- 做最勇敢的自己
- 球囊面罩通气术讲解
- DAM全固态中波发射机
- 第八章排泄护理排尿护理学基础讲解
- 企业法务培训课件
- 《临床护理路径在颈椎前路手术病人护理中的效果实证探究》2300字(论文)
- 2024年《315消费者权益保护法》知识竞赛题库及答案
评论
0/150
提交评论