数据类型和运算符

Posted shamao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据类型和运算符相关的知识,希望对你有一定的参考价值。

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

数据类型

常量的定义

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

变量的定义

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

变量的分类

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

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

数据类型的定义

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; 。

关系运算符

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

注意:

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

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

比较equals和==的区别:

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

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

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

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

逻辑运算符

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

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

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

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

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

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

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

条件运算符

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

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

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

位运算符

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

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

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

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

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

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

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

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

 

以上是关于数据类型和运算符的主要内容,如果未能解决你的问题,请参考以下文章

SQL like

运算符数据类型转换和注释

对“xxx”类型的已垃圾回收委托进行了回调。这可能会导致应用程序崩溃损坏和数据丢失。向非托管代码传递委托时,托管应用程序必须让这些委托保持活动状态,直到确信不会再次调用它们。 错误解决一例。(代码片段

20个简洁的 JS 代码片段

20个简洁的 JS 代码片段

数据类型和运算符