类型和运算
来源:互联网 发布:微信领取淘宝优惠券 编辑:程序博客网 时间:2024/05/20 05:05
1.常量和变量
1.字面量/常量
字面量就是直接给出的一个值,可以是整数,小数等等,字面量也叫做直接量
注意点:Java中的变量必须赋初值才可以使用,初始化操作在内存中为变量开辟了内存空间!
2.变量
(1)变量的分类
变量根据位置不同,分为成员变量和局部变量,
1.成员变量/字段:直接定义在类的{}中的变量(方法外),
2.局部变量:定义在方法内的变量,除了成员变量都是局部变量
(2)变量的表现形式
变量的表现形式有三种:方法的形参,方法内变量,代码块变量
(3)变量的作用域:
1.成员变量:在所定义的类中起作用
2.局部变量:从定义的位置到所在代码块的}之间
2.数据类型
1.基本类型
Java中的数据类型共有两大类:基本类型和引用类型
基本类型分为数值类型、boolean类型和字符类型
其中数值类型又分为:整数类型、小数类型
其中整数类型包括:byte,short,int,long
其中小数类型包括:float和double类型
注意点:
(1)byte b = 10, 10在 byte类型表示的范围内,编译器将10转换为byte类型
(2)整数类型常用的表示方法有2进制,8进制和16进制
二进制使用0B或0b开头,例如:int a = 0B00001000
八进制使用0开头,例如:int b = 012
十六进制使用0X或0x开头,例如:0X001A
(3)整型字面量默认类型是int类型
(4)小数常量默认是double类型
(5)定义float类型变量时小数常量末尾要加上F/f
(6)无论是float还是double都不能表示精确的小数,因此对于金钱类型的数据使用BigDecimal,他表示任意精度
char类型的使用方式有三种:常用的是符号表示和进制来表示。
符号表示:char a = ‘A’;
十进制表示:char a = 65;
十六进制表示:char a = ‘u\0041’;
(7)定义long类型数据末尾要以L或结尾例如:long l = 120L;
2.引用类型
除了基本数类型,其他所有类型都是引用数据类型,包括类,接口,数组。
String类是最常用的引用类型,任何数据类型和字符串类型拼接都是字符串类型。
3.溢出
当要表示的数据超出了数据类型所能表示的范围,例如:int intMax = 2147483648;就会出现数据溢出的问题。
原因分析:
//定义一个int类型的变量,值为int类型表示的最大值int intMax = 2147483647;//intMax+1后再复制给intMaxintMax = intMax + 1;System.out.println(intMax);/* 0B01111111_11111111_11111111_11111111+ 0B00000000_00000000_00000000_00000001———————————————————————————————————————— 0B10000000_00000000_00000000_00000000 转换为十进制为-2147483648*/
在数据计算过程中很容易出现数据溢出,数据溢出会导致数据出错,但是在编译的时候,编译器只会检查语法是否正确,而不会检查结果是否正确。
注意点:比较两个数大小不能用相减的方式,因为有溢出的可能,所以使用比较运算符>,<
4.类型转换
数据类型转换分为两种:
1.自动类型转换又称为隐式类型转换
2.强制类型转换又称之为强制类型转换(可能会损失精度损失或溢出)
注意点:
(1)byte,short,,char一般不参与转换,转换时需要看类型可以表示的范围
(2)强制类型转换需要在转换的数值前加上要转换的类型例如:int a = (int)10.1;
(3)数据运算时,表达式中如果包含多种数据数据类型,那么数据类型会自动提升,byte,short,char会自动提升为int类型,整个表达式的类型将会提升到表达式中类型最高的类型
(4)String和任意类型使用+链接都会变成String类型
3.运算符
运算符分为五种:算数运算符,赋值运算符,三目运算符,比较运算符、逻辑运算符和位运算符。
1.算数运算符
算数运算符:
算数运算符是用来处理四则运算的符号。
注意点:
(1)System.out.println(9888/ 1000 * 1000);//9000
(2)+加号在处理不同数据类型的运算中得到的值是不同的,
如果是数值和字符相加则得到的是数值类型,如果是两个字符类型相加得到的也是数值类型
String a = 'A';System.out.println(a + 1);System.out.println(a + a);
(3)/除号,当两个整数相除得到的结果仍然是整数,小数部分会被忽略。如果当一个正整数除以0.0时或当一个正小数除以0时会引发算术异常。Infinity正无穷大,负数则会得到-Infinaity负无穷大。所有的正无穷大都是相等的,负无穷大也是相等的。0.0/0.0则会得到NaN(Not a Number)
(4)取余%,模数的符号忽略不糊,结果的符号取决被模数
(5)++单纯的对数值操作时是没有区别的:a++和++a都会使a自增1,但是如果是在表达式中,那么表达式里a++是先使用a的值进行运算,然后a自增一,如果是++a那么会使用a自增1后的值进行运算。--也是。
(6)++和--只能操作变量,如果是常量则编译会报错
2.赋值运算符
注意点:
(1)+=中间不能有空格,a += 1不单纯的等价于a = a + 1,而是带有类型转换的
例如:
/*+=赋值符号:中间不能有空格自带隐式类型转换int a = 5;a += 5;等价于 a = (int)(a + 5);*/int a = 10;a += 5;System.out.println(a);//15
3.比较运算符
比较运算符用于比较两个变量或常量之间的关系,比较运算符的结果为boolean类型,其操作格式为:boolean result =表达式A比较运算符 表达式B。
4.三目运算符
用法:数据类型 变量名称 = boolean表达式 ?结果1 :结果2;
若表达式为真,则返回结果1否则返回2。
5.逻辑运算符
1.逻辑运算符有以下几种:逻辑与&,逻辑或}.逻辑非!,异或^,短路与&&,短路或||
2.逻辑与&,同真为真,一假即假
3.逻辑或|,同假为假,一真即真
4.逻辑非!,取反,非真为假,非假即真
3.异或^, 相同为假,不同为真
4.短路与&&,同时为真才能进行下面的运算,左边的布尔表达式如果为假,则右边表达式不在进行计算,此现象称为短路效应.
5.短路与||,只要一个条件表达式为真就会进行下面的运算,左边的布尔表达式如果为真,则右边表达式不在进行计算
//逻辑与&System.out.println(true & true);//trueSystem.out.println(false & true);//falseSystem.out.println(true & false);//falseSystem.out.println(false & false);//falseSystem.out.println("-----华丽的分割线1------");//逻辑或|System.out.println(true | true);//trueSystem.out.println(false | true);//trueSystem.out.println(true | false);//trueSystem.out.println(false | false);//falseSystem.out.println("-----华丽的分割线2------");//逻辑非!System.out.println(!true);//falseSystem.out.println(!false);//trueSystem.out.println("-----华丽的分割线3------");//异或^System.out.println(true ^ true);//falseSystem.out.println(true ^ false);//trueSystem.out.println(false ^ true);//trueSystem.out.println(false ^ false);//falseSystem.out.println("-----华丽的分割线4------");//短路与System.out.println(true && false);//falseSystem.out.println(true && true);//trueSystem.out.println(false && true);//falseSystem.out.println(false && false);//falseSystem.out.println("-----------------------");//短路证明//System.out.println(true && (1 / 0 == 0));//异常System.out.println(false && (1 / 0 == 0)); //falseSystem.out.println("-----华丽的分割线5------");//短路或||System.out.println(true || false);//trueSystem.out.println(true || true);//trueSystem.out.println(false || true);//trueSystem.out.println(false || false);//false//短路证明System.out.println(true || (1 / 0 == 0));//true//System.out.println(false || (1 / 0 == 0)); //异常
6.位运算符
位运算符与逻辑运算符符号相同但表达的含义不同,位运算符两边都是常量或变量,而逻辑运算符两边都是布尔表达式。
1.按位与:同真为真,
2.按位或:同假为假,
3.异或:相同为真,不同为假
//按位与&System.out.println(5 & 3);//1/*十进制5转二进制:00000101十进制3转二进制:00000011----------------------------与结果 00000001 转十进制得1*///按位或|System.out.println(5 | 3);//7/*十进制5转二进制:00000101十进制3转二进制:00000011----------------------------或结果 00000111 十进制7*///异或^System.out.println(5 ^ 3);//6/*十进制5转二进制:00000101十进制3转二进制:00000011----------------------------异或结果 00000110 十进制6*/
4.取反:计算出常量对应的二进制的补码 按位取反后,0->1,1->0,再求取反的值的补码,再转换为二进制即为原值的取反.
//正数取反~System.out.println(~5);//-6/*十进制5转int类型的二进制的为原码00000000_00000000_00000000_000000101取反11111111_11111111_11111111_111111010 反码10000000_00000000_00000000_000000101补码10000000_00000000_00000000_000000110 十进制-6*///负数取反~System.out.println(~-5);//4/*十进制-5转int类型的二进制的为原码10000000_00000000_00000000_000000101反码11111111_11111111_11111111_111111010补码11111111_11111111_11111111_111111011取反00000000_00000000_00000000_000000100 十进制4*/
7.移位运算
1.左移<<,将操作数的二进制左移指定为数,左移之后的空位用0补齐
//正数左移<<System.out.println(3 << 2);//12/*0000_0011左移两为0000_0011_00 十进制为12*///负数左移System.out.println(-3 << 2);//-12/*-3补码1111_1101左移两为1111_1101_00 反码 1000_0010_11补码1000_0011_10*/
2.右移>>,将操作数的二进制右移指定为数,右移之后的空位如果是正数用0补齐,如果是负数用1补齐,求反码补码,操作,再求反码补码
//正数右移>>System.out.println(8 >> 2);//2/*0000_1000右移两为0000_0010 十进制为2*///负数右移System.out.println(-8 >> 2);//-2/*-8补码1111_1000右移两位111111_10反码 100000_01补码100000_10*/
3.无符号右移>>>,将操作数的二进制右移指定为数,右移之后的空位用0补齐
//正数无符号右移>>>System.out.println(5 >>> 2);//1/*00000000_00000000_00000000_00000101右移两位00000000_00000000_00000000_00000001 十进制1*///负数无符号右移>>>System.out.println(-5 >>> 2);//1073741822/*-5 二进制补码 11111111_11111111_11111111_11111011右移两位 00111111_11111111_11111111_11111110 十进制1073741822 */
- 类型和运算
- 运算符和类型转换
- 变量类型和整型运算
- 类型,运算符和表达式
- Python类型和运算--数字
- python的类型和运算
- 运算符和强制类型转换
- Java 整数类型的使用和运算
- 类型转换和运算符优先级问题
- size_t类型和sizeof()运算符
- 运算符和类型强制转换
- sizeof运算符和size_t类型比较
- sizeof运算符和size_t类型
- (七)运算符和类型转换
- 类型说明符和位运算符笔记
- 第二章 类型,运算符和表达式
- sizeof运算符和size_t类型
- Python2.2-原理之类型和运算
- CodeForces 446B DZY Loves Modification 经典+贪心+更换遍历对象
- 祝大家2017鸡年愉快幸福
- 1280. Permutation
- 腐都两年小记
- Java反射实例
- 类型和运算
- android动画_属性动画
- 安卓微信自动抢红包插件优化和实现
- Android 出现错误: Caused by: java.lang.NumberFormatException: Expected an int but was 0.02 at line 1 c
- java基础二变量运算符
- 最新树莓派 raspbian 软件源 2017.1.1
- SwipeLayout侧滑
- 如何将Unity中的脚本文件转为dll文件
- char型变量中能不能存贮一个中文汉字?为什么?