3、java中的数据类型和运算符

版权声明:chaizepeng https://blog.csdn.net/chaizepeng/article/details/85052438

 

数据类型

数据类型是对数据存储在内存中位置的一种抽象表示,java的数据类型总体上分为两大类:基本数据类型和引用数据类型。

1、基本数据类型

       基本数据类型是语言本身定义的,数据结构上有说基本数据类型表示的是真实的数字和字符,在java中,基本数据类型的数据都是存储在栈内存中,基本数据类型包含四类八种,介绍如下。

       第一类:整型,包含四种数据类型,字节型(byte)、短整型(short)、整型(int)和长整型(long)。byte类型的数据在内存中占1个字节(8位),取值范围换成十进制是-2^7到2^7-1,默认值为0;short类型的数据在内存中占2个字节(16位),取值范围是-2^15到-2^15,默认值是0;int类型的数据在内存中占4个字节(32位),取值范围是-2^31到2^31,默认值是0;long类型的数据在内存中占8个字节(64位),取值范围是-2^63~2^63-1,默认值是0L。

       第二类:浮点型,包含两种数据类型,单精度浮点数(float)和双精度浮点数(double),float类型的数据在内存中占4个字节(32位),取值范围是1.4E-45~3.4028235E38 (程序打印的),默认值是0.0;double类型的数据在内存中占8个字节(64位),取值范围是4.9E-324~1.7976931348623157E308,默认值是0.0。两者区别在于double表示的小数更加精确,一般表示浮点数时都是用double,如果声明float型则数值需加F,例如:float f = 20L;

       第三类:字符型,用于存储字符类型数据,占2个字节(16位),取值范围时0到65535,默认值为空。说起字符就要说一下Unicode字符集,0到65535每一个数再Unicode字符集中都对应一个特定的字符,声明的字符型数据需要用单引号引起来,例如:char ch = ‘A’;还有一种就是转义类字符,以”\”开头。

       第四类:布尔型,用于存储布尔类型数据,占用1个字节(8位),只有两个数值true和false,默认值是false。

       补充:数据在内存中是以二进制形式表示的,以byte类型为例,在内存中占8位,由于整型数据有正负之分,所以八位中的最高为用来表示符号位,0为正,1为负。正数在内存中以被保存数据的二进制原码进行存储,而负数是以其对应正数补码形式存在,也就是正数的原码取反后加1。也正是因为存储的数据因为类型不同占用的存储单元也不同,所以就会存在一个问题,当使用占存储单元少的数据类型去强制存储占用存储单元多的数据类型的数据时就会发生精度缺失的错误,这就是强制类型转换会使得数据丢失精度的本质。所以在使用时应注意避免不要造成精度确实。

2、引用数据类型

       引用数据类型可以是String 、数值 、java中的或用户自定义的各种类,引用数据类型的数据在内存中的存储和基本数据类型不同,在栈中存储的仅是变量和存储具体数据的地址,而具体的数据是存储在堆上的,这也是之所以叫做引用类型的原因,栈中存储的仅是引用的存储在堆中的具体数据一个地址而已。(String有点特别)

       对于引用数据类型没什么介绍的,这东西需要长期积累。

       这里着重说一下,java中引用数据类型是遵循引用传递的(string类型有点特别),这里的引用传递指的是可以将引用类型数据的值进行修改,而不是真的去修改地址,java是无法直接去修改地址的。

运算符

1、算术运算符

        顾名思义,就是加(+)、减(-)、乘(*)、除(/)、取余(%)等,其中还有两个特殊的自加和自减操作,简单说一下,自加运算符,例如:i++,就表示i本身加上1,然后将值重新赋值给i,就相当于i = i + 1; ,自减与自加相同只是减1而已。

2、赋值运算符

        就是将值赋给声明的变量,例如:i = 1; 说白了就是将右边的值赋给左边

3、关系运算符

        就是用来比较两个数据之间关系的符号,对于基本数据类型而言,比较的就是大小,而对于引用的数据类型比较的就是两个数据是否存储在同一地址下(只有”!=”和”==”才使用于引用个类型)。符号标识有:> 、<、>=、<=、!=、== 。

        这里说一下”=”和”==”,前一个是赋值运算符,而后一个是比较运算符,例如比较1和2是否相等,使用”==”。

4、逻辑运算符

      Java中的逻辑运算符包括与(&&)、或(||)、非(!)、异或(^),简单介绍以下

      与:A&&B,就是当A并且B 同时满足,才表示条件成立

      或:A||B,表示当A或者B有一个满足时,条件就成立

      非:!A,表示当不满足条件A时,整体的条件就成立

      异或:A^B,当A或B只要有一个为true,整个条件就成立

5、位运算符

       用来操作二进制的运算符,包括:按位与(&)、按位或(|)、右移(>>)、左移(<<)、无符号右移(>>),还有其他的位运算,想了解的非常清楚话建议学习以下编译原理,这里只是简单的介绍以下常用的用法。

       先说一下按位与和逻辑与的区别,两者都是表示与,只有两个条件都成立才可以,但是逻辑与又被称为短路与,意思就是当A&&B中如果A不满足条件则不会再去判断B是否满足条件,而按位与则会去继续判断。按位或同于按位与

       说一下左移,这里不进行具体的位运算演示,只说一下值的变化, a<<b ,a左移b位,相当于a = a * 2 ^ b,就是将a乘以2的b次方的值赋给a。右移相当于除以2的b次方。不过这些操作都需要在合理的数值范围内进行,不然会产生错误.

6、三目运算符

       这个也是开发中经常使用的,具体格式如下:

       String a = 条件是否成立 ?  “1” : “2”;

       如上给a赋值,当条件成立时,则将1赋给a,否则将2赋给a,也就是条件如果成立则取分号前边的值,否则分号后边.

 

猜你喜欢

转载自blog.csdn.net/chaizepeng/article/details/85052438
今日推荐