Javaの研究ノート(III):データ型変換と演算子

Javaの研究ノート(C):データ型変換

1.型変換

1.自动类型提升:当byte short char在参与运算时会自动提升为int类型。
    如果还有long、float、double类型参与运算,则会相应的提升为long、float、double类型
/*例1 byte a=10;
      byte b=20;
      byte c=a+b;
     编译会报错,因为s,b参与运算时提升为int类型,byte接收不了int类型

  例2 byte a=10;
      byte b=20;
      long c=1L
      byte d=a+b+c;报错,abc都提升为long,计算结果也为long,byte接受不了
*/  
    *常量优化机制:在多个常量运算时,会先把结果计算出来,然后在看结果是否在数据范围内,在则不报错
    如:byte r=3+4;//不报错,如果结果超过127则报错

***优先级:byte → short,char → int → long → float → double
    优先级高 → 优先级低:强转;int c =(int)17.2
    优先级低 → 优先级高:自动转换;

2.强制类型转换:丢弃多余字节,可能发生精度损失。
    格式:byte c = (byte)a+b;//a,b为byte

    *补充知识点1:定义 char ch = '我';
    JAVA采用GBK编码就不会报错,因为其占两个字符;
    如果使用UTF-8编码,一个汉字占用3个字节,char只能存储2个字节,故会报错;
    *补充知识点2:操作大数字的时候,注意溢出问题
    int money = 1000_000_000;
    int years = 20;
    int total = money*years;//-147836480,计算时数据已经溢出
    long total = money*years;//结果也为-147836480,原因是,计算结果转换之前(int)money和(int)years已经完成计算,数据已经溢出

    解决方法:
    long total3 = money*((long)years);//计算前先把一个数转换成long

3.字符参与运算
    char ch ='a';
    int r = ch+1;
    运行结果为98。字符在参与运算时,会查找ASCII码表,用字符运算时就是这个字符编码的10进制值
    常用:a 97; A 65; 0 48

2.オペレータ

1.+ 加号,有两层作用
    第一个作用,起数学方面相加作用
    第二个作用,起一个连接符的作用
    拼接符:当加号的运算两边有任意一边是一个字符串,那么加号就会起连接符的作用,将两端内容拼接起来形成一个新的字符串
    每次运算前都会看符号两边有没有字符串:
    System.out.println(2+"22");//222
    System.out.println(20+30+"22");//5022
    System.out.println("22"+1+2);//2212

2. += 如果对short类型数据进行操作时超过范围,会自动进行数据转换

3.区分 逻辑运算符 和 位运算符
    逻辑运算符:与(&&) 或(||) 非(!)
    位运算符:与(&) 或(|) 取反(~) 异或(^)
        例题:最快计算2*8的方法
        答:位运算。位运算直接和底层打交道,效率极高。(2<<3),2左移3位,结果16
    三元运算符:x?y:z;
    如果x为真,则结果为y,否则为z。

おすすめ

転載: blog.51cto.com/14774208/2484017