数据类型与运算符----完整版

数据类型

一、整型变量

        代码:

                      int num=10;

                      System.out.name(num);

int 整型变量占4个字节,一个字节占8个比特位。换算公式 1KB=1024Byte,1MB=1024KB,1GB=1024MB;(所以10月24日是程序员节~)

4个字节取值范围:-2^31~2^31-1;

若超出取值范围则会出现溢出的情况。

二、长整型

代码:
        long a=10L(L可以小写也可以大写建议小写,因为小写l与1相似)

        System.out.println(a);

长整型为8个字节,取值范围:-2^63~2^63-1

三、双精度浮点数

代码:
        double  a=1.0;

        System.out.println(a);

双精度浮点数字节为8,但是浮点数的内存布局与整数差别很大,不能单纯以2^n形式表现。

四、单精度浮点数

代码:float num = 1.0f;

           System.out.println(num);

        float  num=1.0f;//可以写大写也可以写小写,其中必须加上f,如果不加,1.0就会隐形转为为 double类型,程序就会报错。

字节为4,同样因为遵循 IEEE 754标准,所以不能以2^n形式计算取值范围,且表示数据的精度范围较小(一般为小数点后六位),一般都是优先考虑double。

五、字符类型

        代码:char ch = 'a';

字节为2,取值范围为0~2^16-1。注意:1.java中使用 单引号+单个字母的形式表示字符字面值。2.计算机的字符本质上是一个整数,在C语言是ASCII表示字符,但在java中使用Unicode表示字符,因此占用两个字节,表示种类繁多,包括中文。

六、字节类型变量

        代码:byte value= 0;

                   System.out.println(value);

字节为1,取值范围-128~127,(-2^7~2^7-1).注意:字节类型与字符型互不相干。

七、短整型变量

        代码:short value = 0;

                   System.out.println(value);

字节为2,取值范围-32768~32767(-2^15~2^15-1),因为其取值范围较小,一般不推荐使用。

八、布尔类型变量

        代码:boolean value = true;

                   System.out.println(value);

boolean类型有些JVM的实现是占1个字节,有些占一个比特位,没有明确规定。  变量有两种取值:true为真,false为假,且布尔类型与int类型不能相互转换,不存在1为true,0为false的用法。

九、字符串类型变量

代码:

java使用双引号+若干字符的方式表示字符串字面值,和上面的基本数据类型不同,String是引用类型。字符串中的一些特定的不太方便直接表示的字符需要进行转义。其中的“+”代表执行字符串拼接。

类型转换

一、隐形转换

int和long/double相互赋值

代码: int    a = 10;

            long    b = 20;

            a = b;//可以通过

            b = a;//不能通过

            double    c = 20;

            c = a;//能通过

             a = c;//不能通过

结论:不同类型赋值时范围小的可以隐形转为范围大的进行赋值,反之不行。

int与boolean相互赋值

代码: int a = 10;

            boolean  b = true;

            b = a;//出错

             a = b;//出错

结论:int与boolean是不相干的类型,不能相互转换。

int字面常量与byte赋值

代码: byte a=100;//编译通过

            byte  b = 130;//编译不能通过

结论:使用字面常量赋值是java会自动校验,判断赋值是否合理

二、强制转换

代码:int  a = 0;

           double b = 10.5;

           a = (int)b;

           int a = 10;

           boolean b=true;

           b=(boolean)a;//编译出错

结论:强制类型转换可能会精度丢失,如上面代码 b赋值给a小数点被忽略成为10;

            类型不同是无法强制转换。

数值提升

一、int与long混合运算

代码:int  a = 10;

           long b = 20;

           int  c = a + b;//编译出错

            long  d = a + b;//编译通过

结论:在int与long混合运算时,int会自动提升为long,结果为long,若要用int接收,则需要强制转换。

二、byte与byte运算

代码:

结论:byte与byte运算是相同类型但出现报错,是因为在运算时byte会提升为int类型再进行赋值为ibyte会出现出错。

类型提升小结:1.不同类型混合运算时,范围小的会提升为大的

                          2.字节小于4的,在运算时会提升为4个字节的int再进行运算。

三、int与String相互转换

int转化为String

代码:

四、String转int

代码:

运算符

一、算术运算符

基本四则运算 + - * % /

主要注意除法

int/int结果还是int,若需要小数则需使用double计算

其中0不能作为除数

%表示取余运算,不仅可以对int取模还可以对double取模

增量赋值运算 +=,-=,/=,%=,*=

结论:如果取表达式的返回值,则前自增的返回值就是自增后的值,后自增就是自增前的值。

二、关系运算符

主要有以下六个:== != < > <= >

代码

三、逻辑运算符

逻辑运算符主要有三个:&&,||,!

1.逻辑与&&

规则:两个操作数为true时,结果为true,否则结果为false

2.逻辑或 ||

规则:两个都为false,结果为false,否则为true

3.逻辑非 !

规则:操作数为true时,结果为false,操作数为false时,结果为true

4.短路

&&和||遵守短路求值的规则

代码:

System.out.println( 10 > 20 && 10/0 == 0)//打印false

System.out.println( 10 < 20 || 10 / 0)//打印true

都知道 10/0 出现程序会报错,但是代码正常运行,说明 10/0 并没有真正被求值

结论:&& 若左侧表达式为false ,则整体为false 无需计算右侧表达式

            || 若左侧表达式为true,则表达式的整体为true,无需计算右侧式子

5.&与|

如果&与|操作数为boolean时也可以表达逻辑运算但是没有短路求值

四、位运算

主要有:& | ~ ^

位操作表示二进制运算,计算机中的数据是由二进制表示,按位运算就是按照二进制位的每一位进行计算

按位与 &:

两个二进制都为1时,则结果为1,否则为0

按位或 |:

两个二进制只要有一个为1 ,则结果为1,否则为0

注意:当 &和 |操作数为整数时则表示按位运算,若为boolean时则表示,表示逻辑运算

按位取反 ~:如果为0,则为1,如果为1,则为0

五、移位运算

主要有三个: << >> >>>

<<:左移,最左位不要,最右侧补0

右移>>:最右侧不要,左侧依据符号位补(正数补0,负数补1)

无符号右移>>>:最右侧不要,最左侧补0

总结:向左移动n相当于原数字乘以*2^n,向右移动相当于原数字除以2^n。

六、条件运算符

表达式1?表达式2:表达式3

总结:当表达式1的值为true时,执行表达式2,为false时执行表达式3。

小结:%在java中在double中也能运算

            区分前置自增和后置自增的区别

           对于&&之类必须是逻辑运算

            要区分&与|什么时候是逻辑运算什么时候是按位运算

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值