欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

数据类型和运算符

程序员文章站 2022-06-22 12:59:48
摘要:本文主要介绍数据类型和运算符。 数据类型 常量的定义 一块内存中的数据存储空间,里面的数据不可以更改。 变量的定义 一块内存中的数据存储空间,因为里面的数据可以更改,所以称为变量。 变量的分类 局部变量:方法或语句块内部定义的变量,作用域是当前方法或当前语句块,需要在初始化时赋值,存在占内存中 ......

摘要:本文主要介绍数据类型和运算符。

数据类型

常量的定义

一块内存中的数据存储空间,里面的数据不可以更改。

变量的定义

一块内存中的数据存储空间,因为里面的数据可以更改,所以称为变量。

变量的分类

局部变量:方法或语句块内部定义的变量,作用域是当前方法或当前语句块,需要在初始化时赋值,存在占内存中。

成员变量:方法外部或类的内部定义的变量,作用域是整个类,有默认值,存在堆内存中。

数据类型的定义

java语言是一种强类型语言。通俗点说,在java中存储的数据都是有类型的,而且必须在编译时就确定其类型。

数据类型的分类

基本类型变量:保存原始值,它代表的值就是数值本身。通过值传递进行赋值。

引用类型变量:保存引用值,指向内存空间的地址,代表了某个对象的引用,对象本身存放在这个引用值所表示的地址的位置。通过引用传递进行赋值。

数据类型和运算符

基本数据类型

数据类型和运算符

boolean:

boolean数据类型表示1位的信息,只有truefalse两个取值,这种类型只作为一种标志来记录true/false情况。

默认值是false。

char:

char类型是一个单一的16位unicode字符,单引号括起来的单个字符表达,通常用16进制表示。

最小值是’\u0000’(即为0),最大值是’\uffff’(即为65,535)。可以当整数来用,它的每一个字符都对应一个数字。

字符常量指用单引号括起来的单个字符,如'a','a',请特别注意,字符的定界符是单引号,而非双引号。

除了以上所述形式的字符常量值之外,java还允许使用一种特殊形式的字符常量值,这通常用于表示难以用一般字符来表示的字符,这种特殊形式的字符是以一个“\”开头的字符序列,称为转义字符。

java中的常用转义字符见下图:

数据类型和运算符

byte:

byte数据类型是8位的有符号的以二进制补码表示的整数,占1字节。

最小值是-128(-2^7),最大值是127(2^7-1),默认值是0。

short:

short数据类型是16位的有符号的以二进制补码表示的整数,占2字节。

最小值是-32768(-2^15),最大值是32767(2^15-1),默认值是0。

int:

int数据类型是32位的有符号的以二进制补码表示的整数,占3字节。

最小值是-2,147,483,648(-2^31),最大值是2,147,485,647(2^31-1),默认值是0。

long:

long数据类型是64位的有符号的以二进制补码表示的整数,占4字节。

最小值是-9,223,372,036,854,775,808(-2^63),最大值是9,223,372,036,854,775,807(2^63-1),默认值是0l。

float:

float数据类型是32位的单精度的符合ieee 754标准的浮点数,占4字节。

默认值是0.0f。

double:

double数据类型是64位的双精度的符合ieee 754标准的浮点数,占8字节。

默认值是0.0d,浮点数的默认类型为double类型。

数据类型转换

字符型、整形、浮点型的数据在混合运算中相互转换,遵循以下规则:

◆ boolean类型不可以转换为其他的数据类型。

◆ 容量小的类型自动转换为容量大的类型,顺序为:

byte/short/char→int→long→float→double

byte/short/char之间不会相互转换,他们在计算时会首先转为int类型。

◆ 容量大的数据类型转为容量小的数据类型时,要加上强制转换符,但可能造成精度降低或溢出。

◆ 有多种类型的数据类型混合运算时,首先自动将所有的数据转换成容量最大的数据类型,然后在进行计算。

运算符

java语言支持如下运算符:

◆ 算术运算符:++,--,+,-,*,/,%。

◆ 赋值运算符:=,+=,-=,*=,/=,%=。

◆ 关系运算符:>,<,>=,<=,==,!=。

◆ 逻辑运算符:&,|,!,^,&&,||。

◆ 条件运算符:? :。

◆ 位运算符:&,|,~,^,>>,<<,>>>。

优先级如下图所示:

数据类型和运算符

算术运算符

算术运算符主要用于进行基本的算术运算,如加法、减法、乘法、除法等。

单目运算符:+(取正),-(取负),++(自增),--(自减)。

双目运算符:+(相加),-(相减),*(相乘),/(相除),%(取余或者取模)。

关于++和--:

只能用来操作变量,不能用来操作数值或者常量。

自增(++)或自减(--)在变量后面,会先赋值,然后再计算:

1 public static void main(string [] args) {
2     int a = 0;
3     int b = a++;
4     system.out.println("a = " + a);
5     system.out.println("b = " + b);
6 }

结果为:

1 a = 1
2 b = 0

自增(++)或自减(--)在变量前面,会先计算,然后再赋值:

1 public static void main(string [] args) {
2     int a = 0;
3     int b = ++a;
4     system.out.println("a = " + a);
5     system.out.println("b = " + b);
6 }

结果为:

1 a = 1
2 b = 1

赋值运算符

赋值运算符是指为变量或常量指定数值的符号,如可以使用“=”将右边的表达式结果赋给左边的操作数。

主要有:=,+=,-=,*=,/=,%=。

其中,

 a += b; 等价于 a = a + b; ,

 a -= b; 等价于 a = a - b; ,

 a *= b; 等价于 a = a * b; ,

 a /= b; 等价于 a = a / b; ,

 a %= b; 等价于 a = a % b; 。

关系运算符

比较运算符用于判断两个数据的大小,如大于、等于、不等于,比较的结果是一个布尔值。

注意不要对浮点数进行相等性运算,比如 1.0 - 0.3 == 0.7 。

注意:

>、<、>=、<=只支持左右两边操作数是数值类型。

==、!=两边的操作数既可以是数值类型,也可以是引用类型。

比较equals和==的区别:

值类型的变量存储在内存中的堆栈(简称栈),引用类型的变量在栈中仅仅是存储变量的地址,而其本身则存储在堆中。

==操作比较的是两个变量的值是否相等,对于引用型表示的是变量存储的地址是否相同,即栈中的内容是否相同。

equals操作判断是否为一个对象的引用,即堆中的内容是否相同。

==比较的是地址,而equals比较的是内容,显然,当equals为true时,==不一定为true。

逻辑运算符

逻辑运算符主要用于进行逻辑运算。

与(&):只有当两边都为真,结果才为真,如果有一边为假,结果为假。

或(|):如果有一边为真,结果为真,只有当两边都为假,结果才为假。

非(!):当右边为假,结果为真,当右边为真,结果为假。

异或(^):当两边真假不一致即一边为真一边为假,结果才为真,两边同为真或两边同为假,结果均为假。

短路与(&&):当左边为假,则不再判断右边,直接得出结果为假。

短路或(||):当左边为真,则不再判断右边,直接得出结果为真。

条件运算符

条件运算符(? :)也称为“三元运算符”。

语法形式:布尔表达式 ? 表达式1 : 表达式2;

运算过程:如果布尔表达式的值为真,则返回表达式1的值,如果布尔表达式的值为假,则返回表达式2的值。

位运算符

主要有位与(&),位或(|),位非(~),位异或(^),右移(>>),左移(<<),0符号位填充的右移(>>>)。

位运算是以二进制位为单位进行的运算,其操作数和运算结果都是整型值。

位运算与逻辑运算的相应操作的真值表完全相同,其差别只是位运算操作的操作数和运算结果都是二进制整数,而逻辑运算相应操作的操作数和运算结果都是逻辑值布尔型。

右移(>>)是将一个二进制数按指定移动的位数向右移位,移掉的被丢弃,左边移进的部分或者补0(当该数为正时),或者补1(当该数为负时)。

左移(<<)是将一个二进制数按指定移动的位数向左移位,移掉的被丢弃,右边移进的部分或者补0(当该数为正时),或者补1(当该数为负时)。

将一个数左移会使该值乘以2的幂。

将一个数右移会使该值除以2的幂。

无符号右移(>>>)永远不会产生负号,因为其符号位总是被补零。不论被移动数是正数还是负数,左边移进的部分一律补0。