Java基础---数据类型转换和运算符

03 数据类型转换和运算符

数据类型转换

自动类型提升
小范围数据赋值给大范围数据,数据类型自动提升。
要求两者数据类型要能够兼容并且是小转大
byte--->short--->int--->long--->float--->double
char--->int--->long--->float--->double
boolean 不参与类型转换
强制类型转换
大范围数据赋值给小范围数据,数据类型自动提升。
要求两者数据类型要能够兼容并且是大转小,但是此过程可能会输出错误数据。
小数类型转化为整数类型是直接砍掉小数部分,输出整数部分。
表达式
由运算符、变量、字面值常量组成的式子叫做表达式。
表达式运算过程中,数据类型由其中的某个变量或字面值决定,会发生自动类型提升。
有double类型时,值为double;
反之如有float类型,值为float;
再反之如有long类型,值就为long;
都没有时,默认类型是int
public class Demo1 {
	public static void main(String[] args) {
		byte a1 = 12;
		byte a2 = 13;
		int a3 = a1+a2;//a1+a2运算结果类型自动提升为int类型
	}
}
运算符
1.算术运算符:+ - * / %
/   注意事项:两整数相除,结果是整数;
             表达式中有小数时,结果是小数。
%   注意事项:取余结果的符号只和%前面的操作数符号有关;
             用于判断一个数是奇数还是偶数。

2.自增自减运算符 ++  --
如  a++  a--  --a  ++a
对于a的值:不管哪一种都是在a的基础上进行+1 / -1
对于表达式的值:符号在前则先处理a的值,再计算表达式的值;
              符号在后,先算表达式,再变化a。

3.赋值运算符 =   +=   -=   *=   /=   %=
注意,整数类型的数据默认是int 类型的,但是在赋值运算过程中自动对数据类型进行了强转,对于byte b = 1,直接写b+=5没有问题,但是如果写成b = b+5,就需要对其进行数据类型强转b = (byte)b+5。
扩展内容:编译器的优化机制(了解)
在赋值运算符中 += -= *=  /=  %=  在运算的过程中不会进行数据类型的自动提升,其实在底层自动的进行了一步强转。
还有 byte b = 10;字面值常量的默认的类型是 int,这是因为编译器在编译的时候,自动的将 int类型的 10 强制转换为byte,在底层相当于做了 byte b = (byte)10。

4.比较运算符(关系运算符)==  >   >=   <   <=   !=不等于
得出的结果是boolean 类型

5.逻辑运算符  ||短路或   &&短路与
与:表达的是一个并且的关系,运算符两边都为 false 表达式的值为false  其余为true
   全假为假,否则为真
或:表达的是一个或者的关系,运算符两边都是true 表达式的值才为true 其余为false
	全真为真,否则为假
||:短路或  当符号左边的表达式的值为true,就不再执行符号右边的表达式了  
&&:短路与  当符号左边的表达式的值为false,就不再执行符号右边的表达式了
!:非  取反 

扩展:|和&用于位运算
|:位或
&:位与

6.位移运算符 
通过位移运算符进行二进制的快速计算,只能用于整数类型的数据
>> 右移(带符号位)  相当于/2
>>>右移(不带符号位)  只用于正数
<< 左移(带符号位)  相当于*2

7.三元运算符
格式:   
布尔表达式?值1:值2;
布尔表达式结果是true 则输出结果是值1,
布尔表达式结果是false 则输出结果是值2;
值1和值2必须是表达式,不能是语句;
三元表达式的值的类型由值1和值2的类型决定。
例:string s = a%2 == 0?"偶数":"奇数";
拓展题目
1.表达式(int)6.5/7.5*3的结果数据类型是( double )   就是6/7.5*3
2.定义一个int类型的数据,并赋值一个三位数,分别获取其个、十、百位上的数值,并打印输出。
    public class Demo1 {
        public static void main(String[] args) {
            int a = 158;
            int ge = a%10;
            int shi = a/10%10;
            int bai = a/100;
            System.out.println("个位是"+ge+" 十位是"+shi+" 百位是"+bai);
        }
    }
3.定义两个int类型的变量m和n,请用表达式判断n是否为m的因子,
将结果存储在对应类型的变量中并打印输出。
    public class Demo2 {
        public stativ void main(String[] args) {
            int m = 12;
            int n = 4;
            String s = m%n == 0?"n是m的因子":"n不是m的因子";
            System.out.println(s);
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天然首长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值