数据类型转换、运算符(基础篇三)

一、数据类型转换

变量定义赋值的时候, 值得在取值范围之内,自动转换. 如果超出了接收类型的范围, 需要强转

1. 自动转换

自动转换也叫隐式转换,是代码执行过程中取值范围小的类型自动转换为取值范围大的类型。

转换规则

数据类型的范围大小排序

byte、short、char  <  int  <  long  <  float  <  double

范围小的类型向范围大的类型转换,但是byte、short、char在运算过程中是直接转换为int

byte b1=1;
byte b2=1;
byte b3=b1+b2; //这里会报错,在运算过程中byte自动转换为int,运算后就不能再用byte接收,b3应为int类型
System.out.println(b3);

short s1=1;
short s2=1;
short s3=s1+s2;//这里和上边的byte报错一样,s3应为int类型
System.out.println(s3);

char c1=1;
char c2=1;
char c3=c1+c2;//c3应为int类型
System.out.println(c3);

2. 强制转换

强制转换就是把一个范围大的数据类型强制转换为范围小的数据类型,

转换格式:

int i1 =(int)1.0;
数据类型 变量名 = (数据类型)被转数据值;

举例:

int a = 2.0; //在编译阶段就会报错,不兼容类型,需要从double转换为int,可能会有损失
System.out.printl(a); 
//如果一定要转换的话
int b = (int)2.2;
System.out.printl(b);   //结果为2,小数点后的没有了,这就造成了精度损失

下边通过一个简单的例子介绍一下强制转换的原理:

byte占用一个字节,取值范围是[-128,127],如果我们把257强制转换为byte呢?

byte a = (byte)257;
System.out.println(a);  //运行发现结果为1

造成这一结果的原因:

1526549972053.png

强制转换要注意:

  • 精度损失:浮点转换为整数直接取消小数点,舍弃小数点后的数据
  • 数据溢出:范围大的数据类型转换为范围小的类型,有可能超过范围小的数据类型的取值范围,造成数据丢失。

3. ASCII编码表

编码表 就是将人类的字符和一个十进制数进行对应起来组成一张表格。表中每个文字都对应了一个数值,如下:

字符 数值
0 48
9 57
A 65
Z 90
a 97
z 122

这些只用记得几个就可以,其他的可以直接推断出来。

二、运算符

1. 算数运算符

算数运算符包括:
+ 加法运算,字符串连接运算
- 减法运算
* 乘法运算
/ 除法运算
% 取模运算,两个数字相除取余数
++-- 自增自减运算

运算符两侧的数据类型要一致,(byte、short、char类型自动转换为int)

int a = 10;
int b = 20;
int c = a + b ;//a,b都是int类型,可以赋值给int类型的c

byte x = 1;
byte y = 2;
byte z = x + y; //这样会报错,因为在运算过程中,byte转换成了int,如果还需要用byte接收需要强制转换,可能会有损失
int z1 = x + y;  //需要int类型的变量接收,因为运算结果提升到了int

运算两侧的类型不一致时,结果要和大的数据类型保持一致

double a = 100;
int b = 10;
int c = a + b; //错误;运算结果从double转换为int可能会有精度损失,编译报错
double c = a + b;//当运算的两个数据的数据类型不一致时,接收结果的变量数据类型与大的范围的数据类型保持一致

2. ++、--运算符

独立运算:变量在独立运算时,前++和后++没有区别,都是实现自动加1的功能

i++;            ++i;

混合运算:和其他变量放一起时就有区别。

比如:++i是先把i+1在运算

int a = 1;
int b = ++a;
System.out.println(a);//计算结果是2
System.out.println(b);//计算结果是2
变量a自己加1,将加1后的结果赋值给b,也就是说a先 +1 计算得到2,然后复制给b,
因此,a和b的结果都是2。

i++:先取值后运算

int a = 1;
int b = a++;
System.out.println(a);//计算结果是2
System.out.println(b);//计算结果是1
变量a先把自己的值1赋值给变量b,此时变量b的值就是1。然后变量a再去自己再加1。
因此,a的结果是2,b的结果是1。

3. +字符串中的拼接作用

+ 符号在遇到字符串的时候,表示连接、拼接的含义。

"a"+"b"的结果是“ab”,连接含义

System.out.println("5+5="+5+5);//输出5+5=55

注意:当道和加法运算结合在一起的时候,要注意用() 提升运算优先级

4. 赋值运算符

运算符 说明
= 等于号
+= 加等于
-= 减等于
*= 乘等于
/= 除等于
%= 取模等
  1. 赋值运算符 =

=右边的值,赋给左边的变量。其实我们昨天在学习定义变量的时候就接触了。如

int i1 = 5;     //将整数常量5赋值给i1。
int i2 =i1;     //将i1变量的值赋值给i2变量。
int i3 =i1+i2;  //将i1+i2的运算结果赋值给变量i3
  1. +=,-=,*=,/=,%=

运算符和赋值符的结合使用。当运算的时候,有时我们会遇到如下运算需求:

int i1=10;
i1=i1+100;//变量自身参与运算,结果赋值返回给自身
i1+=100;
System.out.println(i1);
//其他几个运算符也是一样使用
  1. += ,-=,*=,/=,%=:自动类型强转功能

在运算过程中,如果涉及到值强转,会自动操作不需要我们手动转换;

byte b1=1;
//b1= b1+ 256;//编译报错
b1+=256; 
System.out.println(b1);//值为1,而不是257. int 强转为 byte ,溢出

int i1=10;
i1*=1.234;  
System.out.println(i1);//值为12,而不是12.34 double 强转为 byte ,精度损失

5. 比较运算符

比较运算符 说明
== 比较符号两边数据是否相等,相等结果是true。
< 比较符号左边的数据是否小于右边的数据,如果小于结果是true。
> 比较符号左边的数据是否大于右边的数据,如果大于结果是true。
<= 比较符号左边的数据是否小于或者等于右边的数据,如果小于结果是true。
>= 比较符号左边的数据是否大于或者等于右边的数据,如果大于结果是true。
!= 不等于符号 ,如果符号两边的数据不相等,结果是true。

比较运算符,是两个数据之间进行比较的运算,运算结果都是布尔值true或者false

public static void main(String[] args) {
    System.out.println(1==1);//true
    System.out.println(1<2);//true
    System.out.println(3>4);//false
    System.out.println(3<=4);//true
    System.out.println(3>=4);//false
    System.out.println(3!=4);//true
}

6. 逻辑运算符

逻辑运算符其实就是与(并且),或(或者),非(不是),用来连接两个布尔类型结果的运算符。其运算结果都是布尔值(truefalse

逻辑运算符 称呼 使用说明
&& 双与
短路与
1. 两边都是true,结果是true
2. 一边是false,结果是false
短路特点:****一假即假。符号左边是false,右边不再运算,效率比单与高。
` ` 短路或
双或
1. 两边都是false,结果是false <br />2. 一边是true,结果是true <br />短路特点:一真即真,符号左边是true,右边不再运算,效率比单或高
取反 1. ! true 结果是false<br />2. ! false结果是true 不是女 !女 -->男

7. 三元运算符

当一个布尔表达式的结果( true 或者 false) 需要对应两种不同的结果时, 我们可以使用三元运算符.

表达式可: 由变量常量操作符组成的式子构成。

三元运算符格式:

数据类型 变量名 = 布尔类型表达式 ? 真值 :假值;
1. 布尔类型表达式结果是true,三元运算符整体结果为真值,赋值给变量。
2. 布尔类型表达式结果是false,三元运算符整体结果为假值,赋值给变量。
注意: 后面真值和假值的数据类型要和 变量接收的类型要匹配 
int score = 59;
String status=  score>=60 ? "及格" : "不及格" ; // 不及格
System.out.println(status); // score=80 及格  score=59 不及格

更多Java相关文章、资料,可以关注公众号故里学Java,回复资源包获取

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271