第二章java运算符数据类型和表达式

上传人:m**** 文档编号:569531744 上传时间:2024-07-30 格式:PPT 页数:103 大小:1.38MB
返回 下载 相关 举报
第二章java运算符数据类型和表达式_第1页
第1页 / 共103页
第二章java运算符数据类型和表达式_第2页
第2页 / 共103页
第二章java运算符数据类型和表达式_第3页
第3页 / 共103页
第二章java运算符数据类型和表达式_第4页
第4页 / 共103页
第二章java运算符数据类型和表达式_第5页
第5页 / 共103页
点击查看更多>>
资源描述

《第二章java运算符数据类型和表达式》由会员分享,可在线阅读,更多相关《第二章java运算符数据类型和表达式(103页珍藏版)》请在金锄头文库上搜索。

1、第二章JAVA数据类型、运算符和表达式主讲教师:主讲教师:毛科亮毛科亮本章目标本章目标1 1数据类型与变量数据类型与变量1.1.标识符与关键字标识符与关键字2.2.数据类型数据类型3.3.常量常量4.4.变量变量二、运算符和表达式二、运算符和表达式1.1.赋值运算赋值运算2.2.算术运算算术运算3.3.关系运算关系运算1 14. 4. 位运算位运算1.1.5. 5. 逻辑运算逻辑运算2.2.6. 6. 其他运算其他运算3.3.三、三、优先级和基本数据类型的转换优先级和基本数据类型的转换1. 运算符的优先级和结合性运算符的优先级和结合性1.2. 自动转换自动转换2.3. 强制转换强制转换1四、引

2、用类型和引用变量四、引用类型和引用变量2 21, 1, 引用类型和引用变量引用类型和引用变量1 1、JAVAJAVA标识符标识符JAVAJAVA语言中语言中, ,为各种为各种变量变量、方法方法和和类类等起的名字等起的名字称为标识符称为标识符JAVAJAVA标识符的命名规则:标识符的命名规则: 应以字母、下划线、美元符开头应以字母、下划线、美元符开头 后跟字母、下划线、美元符或数字后跟字母、下划线、美元符或数字 JAVA JAVA标识符大小写敏感,长度无限制标识符大小写敏感,长度无限制 中间不能有空格中间不能有空格对于程序中要标识的对象(如类、对象、属性、方法、对于程序中要标识的对象(如类、对象

3、、属性、方法、变量、常量等),程序员定义的标识符既要起到唯一标变量、常量等),程序员定义的标识符既要起到唯一标识的作用,又要体现出所标识对象的含义,以增加程序识的作用,又要体现出所标识对象的含义,以增加程序的可读性。的可读性。一、数据类型与变量标识符示例标识符示例合法的标识符不合法的标识符HelloWorldclassDataClassDataClass#_98398_3$bS5_c7HelloWorld一、数据类型与变量JAVAJAVA关键字关键字JAVAJAVA中一些赋以特定的含义、并用做专门用途的中一些赋以特定的含义、并用做专门用途的单词称为关键字(单词称为关键字(keywordkeyw

4、ord)所有所有JAVAJAVA关键字都是小写的,关键字都是小写的,TURETURE、FALSEFALSE、NULLNULL等都不是等都不是JAVAJAVA关键字关键字一、数据类型与变量abstractbooleanbreakbytecasecatchcharclasscontinueconstdfaultdodoubleelseextendsfalsefinalfinallyfloatforgotoifimplementsimportinstanceofintinterfacelongnativenewnullpackageprivateprotectedpublicreturnshorts

5、taticsuperswitchsynchronizedthisthrowthrowstransienttruetryvoidvolatilewhile一、数据类型与变量标识符规则标识符约定俗成:1、包名:全小写,一般为名词。2、类名:首字母大写,每个单词的首字母大写。Java语言区分大小写。3、接口名:同类名。4、方法名:小写字母开头,每个单词的首字母大写,一般为动词5、变量名:小字母开头,每个单词的首写字母大写,一般为名词6、常量名:全大写,单词用下划线隔开标识符下划线不能误写为短横线Java语言使用Unicode字符集,字符集中的字符可以出现在字符数据(char)或字符串数据(strin

6、g)中,他们被单引号或双引号括起来。这些字符不是Java语言的语法成分,而是Java程序要处理的数据。例: String myName=“王刚” String myName=王刚 String 姓名=“王刚”一、数据类型与变量2 2、JAVAJAVA数据类型数据类型数据类型基本(简单)数据类型引用(复合)数据类型数值型字符型(char)布尔型(boolean)整数类型(byte, short, int, long)浮点类型(float, double)类(class)接口(interface)数组(Array)一、数据类型与变量基本数据类型基本数据类型-整型整型 JAVAJAVA各整数类型有固

7、定的表数范围和字段长度各整数类型有固定的表数范围和字段长度 而不受具体操作系统的影响,以保证而不受具体操作系统的影响,以保证JAVAJAVA程序程序 的可移植性的可移植性 类型占用存储空间表数范围byte1字节-128127short2字节-215215-1int4字节-231231-1long8字节-263263-1一、数据类型与变量基本数据类型基本数据类型-浮点型浮点型 JAVAJAVA浮点类型有固定的表数范围和字段长度浮点类型有固定的表数范围和字段长度类型占用存储空间表数范围float4字节-3.403E383.403E38double8字节-1.798E3081.798E308一、数据

8、类型与变量基本数据类型基本数据类型文本型文本型-char-char 占用内存空间占用内存空间 2 2 字节字节charchar代表一个代表一个16-bit Unicode16-bit Unicode字符字符; ; 必须包含用单必须包含用单引号(引号( )引用)引用; ;对于不可显示的字符或存在意义冲突的字符可以用“”加上转义字符表示:十六进制编码形式表示 char c1 = u0061; 后四位为Unicode码。转义字符来将其后的字符转变为其它的含义 char c2 = n; /代表换行符一、数据类型与变量注:在Java中,用于表示文本信息的数据类型是字符型和字符串型。字符含义Unicode

9、值b退格u0008t制表u0009n换行u000ar回车u000d”双引号u0022单引号u0027反斜杠u005c特殊字符特殊字符( (作为了解作为了解) )一、数据类型与变量基本数据类型基本数据类型文本型文本型-String-String 字符串表示一串字符,其中每个字符也是采用Unicode码。字符串数据要用双引号括起来。例如:“Tsinghua University-清华大学”一、数据类型与变量基本数据类型基本数据类型- boolean- boolean占用内存空间占用内存空间 1 byte 1 byte booleanboolean类型适于逻辑运算,只允许取值类型适于逻辑运算,只允许

10、取值truetrue或或falsefalse,不可以,不可以0 0或非或非0 0的整数替代的整数替代truetrue和和falsefalse。需要注意的是:在需要注意的是:在C C语言中,下面的语句是语言中,下面的语句是合法的合法的 int a=53;int a=53;但在但在JavaJava中不行。中不行。一、数据类型与变量常见数据类型举例:publicclassEx2_1publicstaticvoidmain(Stringargs)intx,y;floatz=3.414f;doublew=3.1415;booleantruth=true;charc;Stringstr;Stringstr

11、1=bye;c=a;str=hello!;x=6;y=1000;JAVA语言中,将程序运行时不能被修改的量称为常量。可分为常数和标识符常量。标识符常量实际上是变量,只是它的值初始化后不允许再修改。在变量声明格式的前面加上final修饰符,就使声明了一个常量:finalinta=25;常量一旦初始化后就不能修改。常量分为整形、浮点型、布尔型、字符型和字符串型。一、数据类型与变量3.常量常量文字量文字量又称“字面值”,是指程序中直接书写的数据。这些数据的写法不但决定了它们的值,也决定了他们的数据类型及存贮格式。布尔值:只有两个true和false。整数:八进制用0开头,如017(十进制15);十六

12、进制用0x开头,如0x2f(十进制47);long型数字尾部加L或l。浮点数:一般表示法3.14;指数表示法6.02e3(6.02*10)。浮点数默认的是double,如果指定float,必须在数据后加F或f。字符与字符串:字符数据用单引号括起来的单个字符表示;字符串用一对双引号括起。一、数据类型与变量JAVA语言整型常量的三种表示形式:语言整型常量的三种表示形式: 十进制整数,如12, -314, 0。 八进制整数,要求以0开头,如012 十六进制数,要求0x或0X开头,如0x12 JAVA语言的整型常量默认为语言的整型常量默认为int型,如:型,如: int i =3;声明声明long型常

13、量可以后加型常量可以后加 l 或或 L ,如如 long l = 3L;一、数据类型与变量常量常量JAVAJAVA浮点类型常量有两种表示形式浮点类型常量有两种表示形式十进制数形式,必须含有小数点,例如:3.14 314.0 .314 科学记数法形式,如3.14e2 3.14E2 314E2 JAVA浮点型常量默认为浮点型常量默认为double型型,如要声明一个常量为如要声明一个常量为float型,则需在数字后面加型,则需在数字后面加f或或F,如:,如: double d = 3.14;float f = 3.14f;一、数据类型与变量布尔型常量表示true或false两种状态,只占1字节。一、

14、数据类型与变量l字符常量采用Unicode字符集。对可输入字符用单引号括起来: char c = A; char d = 编;l对于不可输入字符采用转义字符来将其后的字符转变为其它的含义: 八进制的转义序列:+1到3位数字,范围0377; 0:空字符。 Unicode转义字符:u+4位十六进制数字,范围065535; u0000:空字符l3个特殊的字符:双引号”,单引号,反斜线.l5个控制字符:回车(r),换行(n),横向挑格(t), 退格(b)一、数据类型与变量4.4.JAVAJAVA变量变量 程序运行时可以改变的量。程序运行时可以改变的量。变量对应着内存空间中的一个或几个单元。变量对应着内

15、存空间中的一个或几个单元。不同类型的变量内存分配是不一样的,且只不同类型的变量内存分配是不一样的,且只能存贮对应类型的数据。能存贮对应类型的数据。Java是强类型语言,每个变量都必须有一个是强类型语言,每个变量都必须有一个数据类型。数据类型。基本数据类型变量基本数据类型变量引用数据类型变量引用数据类型变量一、数据类型与变量变量声明和初始化变量声明和初始化nJAVAJAVA变量使用前必须先声明和初始化变量使用前必须先声明和初始化( (赋初值赋初值) )例:例: int age; float salary; String name;n变量命名规则:必须是合法的标识符;不能是保留字;变量命名规则:必

16、须是合法的标识符;不能是保留字;在同一作用域必须唯一。在同一作用域必须唯一。一、数据类型与变量变量作用域变量作用域变量按被声明的位置划分:变量按被声明的位置划分:局部变量:方法或语句块内部定义的变量局部变量:方法或语句块内部定义的变量成员变量:方法外部、类的内部定义的变量成员变量:方法外部、类的内部定义的变量一、数据类型与变量变量作用域变量作用域 局部变量的作用域就是它所在的方法或语句块。局部变量的作用域就是它所在的方法或语句块。 在程序调用方法在程序调用方法(进入语句块进入语句块)时,局部变量才被创建时,局部变量才被创建 并可用,随方法并可用,随方法(语句块语句块)的退出,局部变量将被销毁。

17、的退出,局部变量将被销毁。 成员变量依附于对象存在,具有与对象相同的生存期成员变量依附于对象存在,具有与对象相同的生存期 和作用域。和作用域。一、数据类型与变量java中的运算符运算符是一种特殊符号,用以表示数据的运算、赋值和比较,一般由一至三个字符组成。运算符共分以下几种:算术运算符赋值运算符比较运算符逻辑运算符移位运算符二、运算符和表达式运算符用来表示各种运算的符号称为运算符。例如,数值运算中经常用到的加、减、乘、除符号就是运算符。由于它们是进行算术运算的,所以称为算术运算符。运算符必须有运算对象。语言中的运算符的运算对象可以是一个,称单目运算符;运算对象也可以是两个,称双目运算符;运算对

18、象还可以是三个,称三目运算符。单目运算符若放在运算对象的前面称为前缀单目运算符;若放在运算对象的后面称为后缀单目运算符。双目运算符都是放在两个运算对象的中间。三目运算符在语言中只有一个(条件运算符),是夹在三个运算对象之间的。二、运算符和表达式每个运算符都代表对运算对象的某种运算,都有自己特定的运算规则。每个运算符运算的对象都规定了数据类型,同时运算结果也有确定的数据类型。用运算符把运算对象连接起来所组成的运算式称为表达式。每个表达式都可以按照运算符的运算规则进行运算,并最终获得一个值,称为表达式的值。当表达式中出现多个运算符,计算表达式值时,就会碰到哪个先算,哪个后算的问题,我们把这个问题称

19、为运算符的优先级。计算表达式值时,优先级高的运算要先进行。注意,在复杂的表达式中,用圆括号括住的部分要先算,其优先级别高于任何运算符。若在圆括号中又有圆括号,则内层圆括号优先于外层圆括号。二、运算符和表达式算术运算符算术运算符算术运算符的运算数必须是数字类型。算术运算术运算符的运算数必须是数字类型。算术运算符不能用在布尔类型上,但是可以用在算符不能用在布尔类型上,但是可以用在charchar类类型上,因为实质上在型上,因为实质上在JAVAJAVA中,中,charchar类型是类型是intint类类型的一个子集。型的一个子集。模数运算符模数运算符% %,其运算结果是整数除法的余数,其运算结果是整

20、数除法的余数,它能像整数类型一样被用于浮点类型它能像整数类型一样被用于浮点类型(这不同于(这不同于C/C+C/C+,在,在C/C+C/C+中模数运算符中模数运算符% %仅仅能用于整数仅仅能用于整数类型)。类型)。二、运算符和表达式算术运算符二、运算符和表达式算术运算符的注意问题“+”除字符串相加功能外,还能把非字符串转换成字符串,如:“x”+123;的结果是“x123”。如果对负数取模,可以把模数负号忽略不记,如:5%-2=1。但被模数是负数就另当别论了。对于除号“/”,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。intx=3510;x=x/1000*1000

21、;实际运行结果是3000,想想为什么?二、运算符和表达式publicclassEx2_3publicstaticvoidmain(Stringargs)inta=6,b=2;System.out.println(a+b=+(a+b);System.out.println(a-b=+(a-b);System.out.println(a*b=+(a*b);System.out.println(a/b=+(a/b);System.out.println(a%b=+(a%b);算术运算符的应用技巧思考题1:某个培训中心要为新到的学员安排房间,假设共有x个学员,每个房间可以住6人,让你用一个公式来计算他

22、们要住的房间数?二、运算符和表达式答案:(x+5)/6。 这种算法还可用在查看留言板的分页显示上: 其中x是总共的留言数,6是每页显示的留言数,结果就是总共有多少页。二、运算符和表达式算术运算符的优先级规定如下:单目基本算术运算符优先于双目基本算术运算符*、/、%优先于+、-同级单目基本算术运算符的结合性是自右向左同级双目基本算术运算符的结合性是自左向右【例】基本算术运算符的使用。设变量定义如下:intn=10,m=3;floatf=5.0,g=10.0;doubled=5.0,e=10.0;则:-n的结果是-10n+m、n-m、n*m、n%m的结果分别为13、7、30、3、1d+e、d-e、

23、d*e、d/e的结果分别为15.0、-5.0、50.0、0.5n+m-f*g/d的运算顺序相当于(n+m)-(f*g)/d),结果是3.0n%m*f*d的运算顺序相当于(n%m)*f)*d,结果是25.0二、运算符和表达式双目加(+)、减(-)、乘(*)运算和普通算术运算中的加法、减法和乘法相同。例如,2.1+3.6的结果是5.7;2.1-3.6的结果是-1.5;2.1*3的结果是6.3。双目除运算(/)和运算对象的数据类型有关。若两个对象都是整型数据,该运算称为整除,即获得的商是整数。若商有小数,则截去小数部分。若两个运算对象有一个或两个都是实型,则运算结果是实型。例如,14/5,结果为2;

24、而14/5.0,则结果为2.8。双目模运算(%)的对象必须是整型数据,结果是整除后的余数。例如,14%5的结果为4(商为2);14%4的结果为2(商为3)。注意运算结果的符号与被除数相同,例如,13%3、13%-3的结果均为1(商分别为4、-4);-13%3、-13%-3的结果均为-1(商分别为-4、4)。二、运算符和表达式增1减1运算符增1减1运算符都是单目运算符,是用来对整型、字符型、指针型以及数组的元素等变量进行算术运算的,运算的结果仍是原类型,并存回原运算对象。用增1减1运算符和运算对象组成表达式时,运算符可以放在运算对象的前面(称前缀),也可以放在运算对象的后面(称后缀),前缀和后缀

25、的功能略有不同。增1(或减1)运算符作为前缀使用时,是先对运算对象加1(或减1),然后再使用加1(或减1)后的运算对象。增1(或减1)运算符作为后缀使用时,是先使用不加1(或减1)的运算对象,然后再对运算对象加1(或减1)。二、运算符和表达式对象数名称运算符运算规则运算对象运算结果结合性单目增1(前缀)增1(后缀)减1(前缀)减1(后缀)+-先加1,后使用先使用,后加1先减1,后使用先使用,后减1整型或字符型同运算对象的类型自右向左二、运算符和表达式程序例Ex2_2:publicclassEx2_2publicstaticvoidmain(Stringargs)inta=5;System.ou

26、t.println(a+1=+(a+1);System.out.println(a+=+(a+);System.out.println(+a=+(+a);System.out.println(a-1=+(a-1);System.out.println(a-=+(a-);System.out.println(-a=+(-a);System.out.println(-a=+(-a);一、数据类型与变量一、数据类型与变量增1减1运算符的优先级如下:增1减1运算符优先于双目基本算术运算符增1减1运算符和单目基本算术运算符+、-同级别,结合性是自右向左例如,设整型变量a为2,则:+a+1结果为4,变量a

27、为3a-+1结果为3,变量a为1当出现难以区分的若干个+或-组成运算符串时,语言规定,自左向右取尽可能多的符号组成运算符。例如,设整型变量a、b均为2,则:a+b应理解成(a+)+b,结果为4,a为3,b不变a-b应理解成(a-)-b,结果为0,a为1,b不变【例】增1减1运算符的使用。设变量定义如下:charc1=b,c2=B;(c1、c2可看成整型,其值分别为98、66)则:+c1的值是99,运算后c1的值是cc1-的值是98,运算后c1的值是ac1+c2的值是164,运算后c1的值是c,c2的值是Bc1-c2的值是32,运算后c1的值是a,c2的值是B二、运算符和表达式赋值运算符赋值运算

28、符赋值运算符赋值运算符= =当当“= =”两侧的数据类型不一致时,可以使两侧的数据类型不一致时,可以使用默认类型转用默认类型转 换或强制类型转换原则进行处理换或强制类型转换原则进行处理 long l = 100; int i = (int)l; 特例特例:可以将整型可以将整型常量常量直接赋值给直接赋值给byte, short, char等类型变量,等类型变量,而不需要进行强制类型转换,只要不超出其表数范围而不需要进行强制类型转换,只要不超出其表数范围byte b = 12; /合法 byte b = 4096 ; /非法二、运算符和表达式扩展赋值运算符扩展赋值运算符运算符用法举例等效的表达式+

29、=a+=ba=a+b-=a-=ba=a-b*=a*=ba=a*b/=a/=ba=a/b%=a%=ba=a%b二、运算符和表达式赋值运算符注1:在JAVA里可以把赋值语句连在一起,如: x = y = z = 5 ; 在这个语句中,所有三个变量都得到同样的值5。注2 :x += 3等效于x = x + 3,等于*= ,-=,/=依此类推。 二、运算符和表达式publicclassEx2_4publicstaticvoidmain(Stringargs)inta=6,b=2;System.out.println(a+=b=+(a+=b);System.out.println(a=+a);Syste

30、m.out.println(b=+b);System.out.println(a-=b=+(a-=b);System.out.println(a=+a);System.out.println(b=+b);System.out.println(a*=b=+(a*=b);System.out.println(a=+a);System.out.println(b=+b);System.out.println(a/=b=+(a/=b);System.out.println(a=+a);System.out.println(b=+b);System.out.println(a%=b=+(a%=b);Sy

31、stem.out.println(a=+a);System.out.println(b=+b);关系运算符关系运算符是用来比较两个数据大小的,运算的结果是成立或不成立。如果成立,则结果为逻辑值“真”,用”true“表示;如果不成立,则结果为逻辑值”假“,用“false表示。二、运算符和表达式对象数名称运算符运算规则运算对象运算结果结合性双目小于小于或等于大于大于或等于等于不等于=!=满足则为真true,不满足为假,结果为false整型或实型或字符型等逻辑值(整型)自左向右注1:比较运算符的结果都是boolean型,也就是要么是true,要么是false。注2:比较运算符“=”不能误写成“=”

32、,切记!切记!二、运算符和表达式所有关系运算符都是双目运算符,所组成的表达式称为关系表达式。关系运算符可以用来比较两个数值型数据的大小,也可以比较两个字符型数据的大小。字符数据比较时是按该字符对应的ASCII代码值的大小进行比较,其实质也是数值比较。关系运算符的优先级如下:算术运算符优先于关系运算符,=优先于=,!=,=同级,结合性是自左向右=,!=同级,结合性是自左向右二、运算符和表达式publicclassEx2_5publicstaticvoidmain(Stringargs)inta=6,b=2,c=2;if(ab)System.out.println(ab=true);if(a=c)

33、System.out.println(a=ctrue);if(bc)System.out.println(bcfalse);if(b=c)System.out.println(bb)&(bc)System.out.println(true);elseSystem.out.println(false);if(ac)System.out.println(true);elseSystem.out.println(false);if(!(ab)System.out.println(true);注意其中的&是由2个“&”组成的,|是由2个“|”组成的。单目逻辑运算符(!)是前缀运算符,双目逻辑运算符是插

34、在两个运算对象中间,所组成的表达式称为逻辑表达式。逻辑运算符的优先级如下:!优先于双目算术运算符优先于关系运算符优先于&优先于|单目逻辑运算符!和单目算术运算符是同级别的,结合性是自右向左双目逻辑运算符的结合性是自左向右二、运算符和表达式“&”和“&”的区别分析publicclassTestAndpublicstaticvoidmain(Stringargs)intx=0;inty=3;if(x!=0&y=y/x)System.out.println(y=+y);上面例子中,由于while语句的判断条件中的第一个布尔表达式是不成立的,程序就不会判断第二个布尔表达式的值,这就是“短路”。如果两个

35、表达式之间用“&”来连接,如果正好碰到上面所示的特殊情况,程序运行时就会出错二、运算符和表达式java 与或非 操作与(&)、非()、或(|)、异或() 1与运算符与运算符用符号“&”表示,其使用规律如下:两个操作数中位都为1,结果才为1,否则结果为0,例如下面的程序段。public class data13public static void main(String args)int a=129;int b=128;System.out.println(a 和b 与的结果是:+(a&b);运行结果a 和b 与的结果是:128下面分析这个程序:“a”的值是129,转换成二进制就是1000000

36、1,而“b”的值是128,转换成二进制就是10000000。根据与运算符的运算规律,只有两个位都是1,结果才是1,可以知道结果就是10000000,即128。二、运算符和表达式或运算符或运算符用符号“|”表示,其运算规律如下:两个位只要有一个为1,那么结果就是1,否则就为0,下面看一个简单的例子。public class data14public static void main(String args)int a=129;int b=128;System.out.println(a 和b 或的结果是:+(a|b);运行结果a 和b 或的结果是:129下面分析这个程序段:a 的值是129,转换

37、成二进制就是10000001,而b 的值是128,转换成二进制就是10000000,根据或运算符的运算规律,两个位满足其中有一个或两个是1,结果就为1,可以知道结果就是10000001,即129。二、运算符和表达式非运算符非运算符用符号“”表示,其运算规律如下:如果位为0,结果是1,如果位为1,结果是0,下面看一个简单例子。public class data15public static void main(String args)int a=2;System.out.println(a 非的结果是:+(a);二、运算符和表达式异或运算符异或运算符是用符号“”表示的,其运算规律是:两个操作数的

38、位中,相同则结果为0,不同则结果为1。下面看一个简单的例子。public class data16public static void main(String args)int a=15;int b=2;System.out.println(a 与 b 异或的结果是:+(ab);运行结果a 与 b 异或的结果是:13分析上面的程序段:a 的值是15,转换成二进制为1111,而b 的值是2,转换成二进制为0010,根据异或的运算规律,可以得出其结果为1101 即13。二、运算符和表达式位运算符任何信息在计算机中都是以二进制的形式保存的,&,|,除了可以作为逻辑运算符,也可以做为位算符,它们对两个

39、操作数中的每一个二进制位都进行运算。只有参加运算的两位都为1,&运算的结果才为1,否则就为0。只有参加运算的两位都为0,|运算的结果才为0,否则就为1。只有参加运算的两位不同,运算的结果才为1,否则就为0。我们可以对数据按二进制位进行移位操作,java的移位运算符有三种:右移无符号右移二、运算符和表达式运算符运算符含义含义&按位与|按位或按位取反带符号右移不带符号右移位运算符位运算符二、运算符和表达式publicclassEx2_7publicstaticvoidmain(Stringargs)inta=6,b=2;System.out.println(a=+(a);System.out.pr

40、intln(ab=+(ab);System.out.println(ab=+(ab=+(ab);System.out.println(a&b=+(a&b);System.out.println(a|b=+(a|b);System.out.println(ab=+(ab);“”和“”区别的实例分析publicclassShiftTestpublicstaticvoidmain(Stringargs)intx=0x80000000;inty=0x80000000;x=x1;y=y1;System.out.println(“0x800000001=”+Integer.toHexString(x);S

41、ystem.out.println(“0x800000001=”+Integer.toHexString(y);运行结果如下:0x800000001=c00000000x800000001=40000000十六进制与二进的对比十六进制与二进的对比0x8000000016=1000,0000,0000,0000,0000,0000,0000,000020xc000000016=1100,0000,0000,0000,0000,0000,0000,000020x4000000016=0100,0000,0000,0000,0000,0000,0000,00002二、运算符和表达式移位运算的注意事项

42、及小技巧移位运算符适用类型有byte、short、char、int、long对低于int型的操作数将先自动转换为int型再移位。对于int型整数移位ab,系统先将b对32取模,得到的结果才是真正移位的位数。例如:a33和a1结果是一样的,a32的结果还是a原来的数字。对于long型整数移位时ab,则是先将移位位数b对64取模。移位不会改变变量本身的值。如a1;在一行语句中单独存在,毫无意义。x1的结果和x/2的结果是一样的,x2和x*4的结果也是一样的。总之,一个数左移n位,就是等于这个数乘以2的n次方,一个数右移n位,就是等于这个数除以2的n次方。请思考:如何用程序实现求2的x次方。答案:y

43、=1 3 ?sdfsdfsd:sddddddd);下标运算符下标运算符 判断类的实例运算符判断类的实例运算符instanceof instanceof 内存分配运算符内存分配运算符new new 强制类型转换运算符强制类型转换运算符 ( (类型类型)(int) (String)(int) (String)方法调用运算符方法调用运算符 () () 访问对象实例或类的方法运算符访问对象实例或类的方法运算符 . . 二、运算符和表达式表达式表达式表达式是由操作数和运算符按一定的语法形式组表达式是由操作数和运算符按一定的语法形式组成的符号序列。一个常量或一个变量名字是最简成的符号序列。一个常量或一个变

44、量名字是最简单的表达式,其值即该常量或变量的值;表达式单的表达式,其值即该常量或变量的值;表达式的值还可以用作其他运算的操作数,形成更复杂的值还可以用作其他运算的操作数,形成更复杂的表达式的表达式。Eg:a5.0 + a(a-b)*c-4i30 & i%10!=0二、运算符和表达式表达式规则表达式规则主要涉及标识符的使用、变量定义、各种数据类型的应用、不同数据类型之间的转换、表达式语句和运算符等内容。表达式是Java语言基础的主要内容。他是组成Java程序语句的基础构件,是实现程序数据加工与处理的主要手段。正确、熟练的书写表达式是Java程序设计的基本功。二、运算符和表达式表达式的数据类型自动

45、提升:关于类型的自动提升,java定义了若干适用于表达式的类型提升规则。在表达式中,所有byte型、short型和char型的值将被提升到int型。如果一个操作数是long型,计算结果就是long型。如果一个操作数是float型,计算结果就是float型。如果一个操作数是double型,计算结果就是double型。二、运算符和表达式课堂练习:short s1=1;s1=s1+1;有什么错?short s1=1;s1+=1;有什么错? short s1=1;s1=s1+1;有什么错?short s1=1;s1+=1;有什么错?当使用+=、-=、*=、/=、%=、运算符对基本类型进行运算时,遵循如

46、下规则: 运算符右边的数值将首先被强制转换成与运算符左边数值相同的类型,然后再执行运算,且运算结果与运算符左边数值类型相同。在s1=s1+1;中,s1+1运算的结果是int型,把它赋值给一个 short型变量s1,所以会报错;而在s1+=1;中,由于是s1是short类型的,所以1首先被强制转换为short型,然后再参与运算,并且结果也是short类型的,因此不会报错。那么,s1=1+1;为什么不报错呢?这是因为1+1是个编译时可以确定的常量,“+”运算在编译时就被执行了,而不是在程序执行的时候,这个语句的效果等同于s1=2,所以不会报错。前面讲过了,对基本类型执行强制类型转换可能得出错误的结

47、果,因此在使用+=、 -=、*=、/=、%=等运算符时,要多加注意。二、运算符和表达式运算符的优先级我们可以使用括号改变运算赋的优先级,分析int a =2;int b = a + 3*a;语句的执行过程 与int a =2;int b =( a + 3)*a;语句的执行过程的区别 。三、优先级和基本数据类型的转换运算符的优先级别及结合性当在一个表达式中存在多个运算符进行混合运算时,会根据运算符的优先级别来决定运算顺序,优先级最高的是括号“()”,它的使用与数学运算中的括号一样,只是用来指定括号内的表达式要优先处理。例如:int num=8*(4+6);/ num为80三、优先级和基本数据类型

48、的转换运算符的优先级别及结合性对于处在同一层级的运算符,则按照它们的结合性,即“先左后右”还是“先右后左”的顺序来执行。Java中除赋值运算符的结合性为“先右后左”外,其他所有运算符的结合性都是“先左后右”。关于运算符优先级的顺序,如下表所示。三、优先级和基本数据类型的转换优 先 级说 明运 算 符最高括号()下标运算符.正负号+-一元运算符+-!乘除运算*/%加减运算+-移位运算比较大小=比较是否相等=!=按位与运算&按位异或运算按位或运算|逻辑与运算&逻辑或运算|三元运算符?:最低赋值及复合赋值=*=/=%=+=-=&=|=三、优先级和基本数据类型的转换如何避免多个运算符带来的问题对于in

49、ta=2;intb=a+3*a+;这样的语句,b最终等于多少呢?对于inta=2;intb=(a+)+3*a;这样的语句,b最终等于多少呢?三、优先级和基本数据类型的转换前者结果是8。后者结果是11。三、优先级和基本数据类型的转换如何避免多个运算符带来的问题与其去思考其中的原因,我们还不如将上面的第二句改为几条语句来实现我们想要的结果。不要在一行中编写太复杂的表达式,也就是不要在一行中进行太多的运算在一行中进行太多的运算并不能为你带来什么好处,相反只能带来坏处,它并不比改成几条语句的运行速度快,它除可读行差外,还极容易出错。对于优先级顺序,读者不用刻意去记,有个印象就行如果你实在弄不清这些运算

50、先后关系的话,就用括号或是分成多条语句来完成你想要的功能,因为括号的优先级是最高的,这也是软件编码规范的一个要求。三、优先级和基本数据类型的转换基本数据类型转换基本数据类型转换整型整型, ,实型实型, ,字符型数据可以混合运算。运算中字符型数据可以混合运算。运算中不同类型的数据先转化为同一类型,转换从低不同类型的数据先转化为同一类型,转换从低级到高级,类型间的关系如下:级到高级,类型间的关系如下:三、优先级和基本数据类型的转换数据类型之间的相互转换在对多个基本数据类型的数据进行混合运算时,如果这几个数据并不属于同一基本数据类型,需要先将它们转换为统一的数据类型,然后才能进行运算。基本数据类型之

51、间的相互转换又分为两种情况:自动类型转换强制类型转换。三、优先级和基本数据类型的转换1自动类型转换当需要从低级类型向高级类型转换时,编程人员无需进行任何操作,Java会自动完成类型转换。低级类型是指取值范围相对较小的数据类型,高级类型则指取值范围相对较大的数据类型,例如long型相对于float型是低级数据类型,但是相对于int型则是高级数据类型。在基本数据类型中,除了boolean类型外均可参与算术运算,这些数据类型从低到高的排序如下图所示。三、优先级和基本数据类型的转换自动类型转换在不同数据类型间的算术运算中,自动类型转换可以分为两种情况进行考虑:第一种情况含有int、long、float

52、或double型的数据第二种情况含有byte、short或char型的数据。三、优先级和基本数据类型的转换自动类型转换第一种情况如果在算术表达式中含有int、long、float或double型的数据,Java首先会将所有数据类型较低的变量自动转换为表达式中最高的数据类型,然后再进行计算,并且计算结果的数据类型是表达式中级别最高的数据类型。三、优先级和基本数据类型的转换多种类型的数据混合运算有多种类型的数据混合运算时,系统首先自动的将其中容量小的数据转换成容量最大的那一种数据类型,然后再进行计算。如果其中一个运算对象是double类型的另一个也会被转换成double类型。否则,如果其中一个运算

53、对象是float类型的,另一个也会被转换成float类型的。否则,如果其中一个运算对象是long类型的,另一个也会被转换成long类型的。否则,如果其中一个运算对象是int类型的,另一个也会被转换成int类型的。否则,如果其中一个运算对象是short类型的,另一个也会被转换成short类型的。三、优先级和基本数据类型的转换例如下面这段代码:Java首先会自动将表达式“b * c - i + l”中的变量b、c和i的数据类型转换为long型。然后再进行计算,并且计算结果的数据类型为long型。所以将表达式“b * c - i + l”直接赋值给数据类型相对小于long型(例如int型)的变量是不

54、允许的,但是可以直接赋值给数据类型相对大于long型(例如float型)的变量。byte b = 75;char c = c;int i = 794215;long l = 9876543210L;long result = b * c - i + l;三、优先级和基本数据类型的转换再看下面这段代码:Java首先会自动将表达式“b * c - i + d”中的变量b、c和i的数据类型转换为double型,然后再进行计算,并且计算结果的数据类型为double型。所以将表达式“b * c - i + d”直接赋值给数据类型相对小于double型(例如long型)的变量是不允许的。byte b =

55、75;char c = c;int i = 794215;double d = 11.17;double result = b * c - i + d;三、优先级和基本数据类型的转换自动类型转换第二种情况如果在算术表达式中只含有byte、short或char型的数据,Java首先会将所有变量的类型自动转换为int型,然后再进行计算,并且计算结果的数据类型是int型。三、优先级和基本数据类型的转换例如下面这段代码:Java首先会自动将表达式“b + s * c”中的变量b、s和c的数据类型转换为int型,然后再进行计算,并且计算结果的数据类型为int型。所以将表达式“b + s * c”直接赋值

56、给数据类型小于int型(例如char型)的变量是不允许的,但是可以直接赋值给数据类型相对大于int型(例如long型)的变量。byte b = 75;short s = 9412;char c = c;int result = b + s * c;三、优先级和基本数据类型的转换再看下面这段代码:即使是在这段代码中,Java也会自动将表达式“s1 * s2”中的变量s1和s2的数据类型转换为int型,然后再进行计算,并且计算结果的数据类型也为int型。对于数据类型为byte、short、int、long、float和double的变量,可以将数据类型较小的数据或变量,直接赋值给数据类型较大的变量

57、,但是相反的条件则不成立。short s1 = 75;short s2 = 9412;int result = s1 * s2;三、优先级和基本数据类型的转换2强制类型转换如果将Java默认为int型的数据“774”赋值给数据类型为byte型变量,方法如下:byteb=(byte)774;最终变量b的值为6,原因是整数774超出了byte型的取值范围,在进行强制类型转换时,整数774的二进制数据的前24位将被舍弃,变量b的数值是后8位的二进制数据,如下图所示。三、优先级和基本数据类型的转换向字符串的转换在“字符串+操作数”运算中,操作数(如一个数值)会被自动转换为字符串类型,然后进行字符串的拼

58、接工作。此处的“+”不是加法运算,而是字符串拼接符。例:System.out.println(“10的平方是:”+100)在Java中,包括null在内的任何类型都可以被转换成字符串类型。三、优先级和基本数据类型的转换例:(掌握表达式中数据类型的转换)例:(掌握表达式中数据类型的转换) public class Ex2_8public static void main(String agrs)short s = 10;long l=100;System.out.println(s*l);int a = 1;byte b = 2,e =3;char c = a;int d = b+c;/byte

59、 f = b+e;int i = 1234567809;float j = i;System.out.println(j);System.out.println(d);三、优先级和基本数据类型的转换程序举例publicclassEx2_9publicstaticvoidmain(Stringargs)intrand;doublefrand;/调用Math类的random()方法生成0.0-100之间的随机数frand=Math.random()*100;/下一句没有使用强制类型转换,编译会报错/rand=frand;rand=(int)frand;/输出随机浮点数System.out.prin

60、tln(randomnumber(beforeTypeCast):+frand);/输出随机整数System.out.println(randomnumbergeneratedis:+rand);三、优先级和基本数据类型的转换void public method() int i=1,j; float f1=0.1; float f2=123; long l1 = 12345678,l2=8888888888; double d1 = 2e20,d2=124; byte b1 = 1,b2 = 2,b3 = 129; j = j+10; i = i/10; i = i*0.1; char c1=

61、a,c2=125; byte b = b1-b2; char c = c1+c2-1; float f3 = f1+f2; float f4 = f1+f2*0.1; double d = d1*i+j; float f = (float)(d1*5+d2); 课堂练习 说出下面程序说出下面程序片断中编译错误或片断中编译错误或可能产生计算溢出可能产生计算溢出的部分的部分Java中数据类型分为两大类:基本类型和引用类型。相应的变量也就有两种类型:基本类型和引用类型。引用类型的值是指向内存空间的引用,即地址,所指向的内存中保存着变量所表示的一个值,或一组值。注:在讲完对象的概念后,专门介绍引用变量

62、及数据类型包装类的知识。引用类型和引用变量四、引用类型和引用变量引用类型引用类型包括类引用、接口引用以及数组引用。下面的代码分别声明一个java.lang.Object类的引用、java.util.List接口的引用和一个int型数组的引用。说明:将引用类型的常量或变量初始化为null时,表示引用数据类型的常量或变量不引用任何对象。Object object = null;/ 声明一个Object类的引用变量List list = null;/ 声明一个List接口的引用变量int months = null;/ 声明一个int型数组的引用变量四、引用类型和引用变量基本数据类型与引用数据类型的

63、区别基本数据类型与引用数据类型主要区别在以下两个方面:基本数据类型与引用数据类型的组成Java虚拟机处理基本数据类型变量与引用数据类型变量的方式。四、引用类型和引用变量基本数据类型与引用数据类型组成分析基本数据类型是一个单纯的数据类型,它表示的是一个具体的数字、字符或逻辑值,例如68、M或true对于引用数据类型,若一个变量引用的是一个复杂的数据结构的实例,则该变量的类型就属于引用数据类型在引用数据类型变量所引用的实例中,不仅可以包含基本数据类型的变量,还可以包含对这些变量的具体操作行为,甚至是包含其他引用类型的变量。四、引用类型和引用变量Java虚拟机对数据类型的处理方式对于基本数据类型的变

64、量,Java虚拟机会根据变量的实际类型为其分配内存空间。例如为int型变量分配4个字节的内存空间。而引用类型的变量,Java虚拟机在内存空间中存放的并不是变量所引用的对象,而是对象在堆内存中存放的地址,所以引用变量最终只是指向被引用的对象地址,而不是存储引用对象的数据,因此两个引用变量之间的赋值,就是将一个引用变量存储的地址复制给另一个引用变量,从而使两个变量指向同一个对象。四、引用类型和引用变量例如创建一个图书类Book:声明两个Book类的实例,分别通过变量book1和book2进行引用,对book1进行具体的初始化,而将book2初始化为null,具体代码如下。public class

65、Book String isbn = “978-7-115-16451-3”;String name = “应用开发完全手册”;String author = “科技”;float price = 59.00F;Book book1 = new Book();Book book2 = null;四、引用类型和引用变量Java虚拟机为引用变量book1、book2及book1所引用对象的成员变量分配的内存空间如下图所示。 从图中可以看出,变量book1引用了Book类的实例,book2没有引用任何实例。四、引用类型和引用变量下面对变量book2进行具体的初始化,将book1引用实例的地址复制给b

66、ook2变量,即book2与book1引用同一个Book类的实例,具体代码如下:book2 = book1;此时Java虚拟机的内存空间分配情况如下图所示。四、引用类型和引用变量课后作业课后作业1、 1 public class Test 2 public static void main(String args) 3Test test=new Test();4int i=0;5test.test1(i);6i=i+;7System.out.print(i);8public void test1(int i)9i+;输出的结果是:课后作业课后作业2、public class Test publ

67、ic static void main(String args) int i=0; /here.哪项替换类中的/here 部分,不会得出结果为0呢?A:System.out.print(i+);B:System.out.print(i+0);C:System.out.print(i);D:System.out.print(i-);课后作业课后作业3、x=x+1,x+=1及x+的效率哪个最高,为什么?4、int a=5,b=3; if(!(a= =b)&(a+b+)If中的表达式会成立吗?a 和 b的值分别为_和_5、short s=1; s=s+1;此程序有错误吗?为什么?6、short s=

68、1; s+=1;此程序有错误吗?为什么?7、byte b=2,e=3; byte f=b+e;此程序有错误吗?为什么?课后作业课后作业8、public class Test public static void main(String args) int i=0; i=i+ + +i; int j=0; j=+j + j+ + j+ + j+; int k=0; k=k+ + k+ + k+ + +k; int h=0; h=+h + +h; int p1=0,p2=0; int q1=0,q2=0; q1=+p1; q2=p2+; System.out.print(i=+i+j=+j+k=+k+h=+h+p1=+p1+p2=+p2+q1=+q1+q2=+q2); 输出的结果为:输出的结果为:ThankYou

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号