JAVA菜鸟入门篇 - 数据类型转换、运算符(四)

郑重申明,本人纯属个人学习总结,如有感兴趣的朋友可以一起学习。

1、类型转换

1.1 自动类型转换:容量小的数据类型可以自动转换为容量大的数据类型。
//这里的容量指的是数据类型可以表数的范围,而不是数据类型的几个字节的问题。
特例:
图解:黑色的实线表示无数据丢失的自动类型转换,而红色的虚线表示在转换时可能会精度的损失。


===================================================

byte b = 123; //123没有超过byte类型的表数范围,可以自动转换
byte b2 = 300;  //300超过byte类型的表数范围,可以自动转换,可能存在精度丢失
char c = -3;     //-3超过char类型的表数范围,可以自动转换,可能存在精度丢失
char c2 = 'a';
int i = c2;
long d01 = 123213;    
float f = d01;       //long类型可以自动转换为float类型,只要不要超过类型的表数范围

===================================================

1.2 强制类型转换

 强制类型转换:又被成为造型,用于显示的转换一个数值的类型,在有可能丢失信息的情况下进行的转换是通过造型来完成的,但可能造成精度降低或溢出。
注意:当将一种类型强制转换成另一种类型,而又超过了目标类型的表示范围,就会截断成为一个完全不同的值。

======================================================

//测试强制转型
int i2 = -100;
char c3 = (char)i2;   //编译可以通过,-100超过char的表数范围,所以转换成完全不同的值,无意义的值!
System.out.println(c3);

======================================================

1.3 运算时类型提升问题

运算时,当存在不同数据类型的变量进行运算时,自动进行类型转化为表数范围大的数据类型。

//表达式中的类型提升问题
int a = 3;
long b = 4;
double d = 5.3;
int c = (int)(a+b);   //做所有的二元运算符(+-/*%),都会有类型提升的问题!
float f = (float)(a + d);  //存在类型转换问题

     注意事项:操作比较大的数时,要留意是否溢出,尤其是整数操作时。

==================================

int money = 1000000000;  //10亿
int years = 20;
long total = (long)money*years;   //返回的是负数
System.out.println(total);


分析:money和years都是int类型变量,相乘以后结果任然是int类型,计算结果超过int类型表数范围,存在溢出,将money进制强制类型转换为long类型。


//计算一个人70年心跳多少次
long times = 70L*60*24*365*70;  //L表示将整型常量转换为long类型。
System.out.println(times);

==================================

JDK7.0新增特性之一:
1)、二进制整数
- int a = 0b0000_0000_0000_0000_0000_0000_0000_0011;
2)、下划线分隔符


2、运算符

2.1、赋值运算符

赋值运算符用于把一个数赋予一个变量。赋值运算符两边的类型不一致时,那么如果左侧的数据类型的级别高,则右边的数据将转换成左边的数据类型在赋予左边的变量,否则需要强制类型转换。

赋值运算符包括:= 、+=、-=、*=、%=、/=等。

扩展赋值运算符:

&=       按位与赋值 

|=       按位或赋值

^=       按位异或赋值

>>=     右移赋值

>>>=     右移赋值,左边空出的位以0填充 ;无符号左移

<<=     左移赋值

2.2、算术运算符

算数运算符用于对整型数或者浮点数进行运算,java语言中的算术运算符包括二元运算符和一元运算符。所谓的几元运算符即参加运算的操作数的个数。

1) 二元运算符

Java的二元运算符有+(加)、-(减)、*(乘)、/(除)、%(取余数)。

注意:二元运算符注意类型的提升。

2) 一元运算符

Java的一元运算符有++(自加)、--(自减)

2.3、关系运算符

关系运算符用来比较两个值,返回布尔类型的值true或false。

等于 不等于 小于 小于等于 大于等于 大于

==    !=   <     <=       >=      >

2.4、条件运算符

条件运算符的作用是根据表达式的真假决定变量的值。

1> 格式:条件表达式 ? 表达式2 :表达式3

2> 功能:条件表达式为true,取“表达式2”值,为false,取“表达式3”的值

例: int a=0x10 , b=010 , max ;

max=a>b ? a : b ;

System.out.println(max) ; // 输出16

2.5、 逻辑运算符

逻辑与:&&
逻辑或:||
逻辑非:!
逻辑与和逻辑或采用短路的方式。从左到右计算,如果确定值则不会在计算下去。

例:boolean c = 1<2&&2>(3/0);    //1<2为假,后面就不需要计算

2.6、位运算符

运算符    结果

~        按位非(NOT)(一元运算)

&        按位与(AND) 

|        按位或(OR) 

^        按位异或(XOR)

>>       右移

>>>     右移,左边空出的位以0填充 ;无符号右移

<<      左移 

按位非(NOT) 

按位非也叫做补,一元运算符NOT“~”是对其运算数的每一位取反。例如,数字42,它的二进制代码为: 00101010经过按位非运算成为 11010101 

注意:笔试可能会考:
- 右移一位相当于除2取商
- 左移一位相当于乘以2

==========================================

//测试位运算
int m = 8;
int n = 4;
System.out.println(m&n);
System.out.println(m|n);
System.out.println(~m);
System.out.println(m^n);

显示结果:

0
12
-9
12

==========================================

2.7、字符串连接符
“+”运算符两侧的操作数中只要有一个是字符串(String)类型,系统会自动将另一个操作数转换为字符串后再进行连接。

==================

System.out.println(4+"5");

显示结果:45

==================

2、8、三目运算符
三目条件运算符,语法格式:
- x ? y : z 
- 其中x为boolean类型表达式,先计算x的值,如有true,则整个三目运算的结果为表达式y的值,否则整个运算 结果为表达式z的值。

可以用来代替简单的if...else判断!

====================

int a=3;
int b=5;
String str= "";

str = (a<b)?"a<b":"a>=b";  
System.out.println(str);

显示结果:a<b

====================

2.9、运算符优先级的问题

本文参考:http://blog.csdn.net/csh624366188/article/details/7282959

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值