运算符与数据类型转换

1.“+=”的实质:

public static void main(String[] args) {
    //+=表示:左边的变量 = (左边变量的数据类型)(左边的变量+ 常量);
    int b = 3;
    b+='a';
    System.out.println(b);
}

}

2.数组的定义方式:

public static void main(String[] args) {
    //数组的定义方式
    int [] arr = new int[10];
    System.out.println(arr[0]);
    int c[][] = new int[10][10];
    int []d[] = new int[10][10];
}

3.自增和自减运算

public static void main(String[] args) {
    int a = 3;
    //--a和++a是先自减一和自加一后在进行运算
    int b= --a*5;    //    b = 10


    int n = 3;
    //n--和n++是先运算再进行减一或加一的计算
    int m = n--*5;
    System.out.println(m);//    m = 15
    System.out.println(n);//    n = 2;
}
    以自增为例:
        先++,
            int a = 1;
            ++a;  
            1.先进行自增。
            2.再把值拿出来。
            3.把拿出来的值参与运算
        后++,
            int a = 1;
            a++;
            1.先把值拿出来。
            2.再进行自增。
            3.把拿出来的值参与运算。

“不管是先++,还是后++,单独写一行的时候,结果是一模一样的。”

4.<<和>>和>>>运算:

int r = 3;
//计算规则:将r转换成二进制数,然后根据8421转化码,向左移动2个位置,得到的二进制数再转化为十进制数
int d = r<<2;
System.out.println(d);//   d = 12;
//计算规则同上,>>与>>>计算的结果一样
int v = d>>2;
System.out.println(v);  //   v =  3

5.类型间的转换:

类型强弱从小到大:
byte < short < int < long < float < double char boolean
字节数: 1 2 4 8 4 8 2 基本不考虑

public static void main(String[] args) {
    // 赋值正确,float的范围比int大,布尔类型不能与int类型相互转换

    float f = -412;
    int a = (int)f;
    double d = 0x12345678;
    //当int型强制转换为byet型时,若超过byte的范围(-128~127),则会损失精度,去掉前三个字节,保留最后一个字节
    byte mb = (byte)300;
    System.out.println(mb);   //mb =  44;


    //long p = 012;    输出结果为10,当p= 018或019时报错,020时不报错
   // int n = 011;     输出结果为9
    //int m= "join"+3;
    String s= "join"+ 3;
    //当char类型与int类型相加时,char类型转换成相应的ASCII码后,在进行运算。
    int g= 'a' + 5;

    //类型强弱:double>float>int;因此,小数后面如果不加f,默认类型为double,int型与double型相加时,结果为double型,
    //若想用int或者float类型的变量接收,则必须强制类型转换
   float h =  5+(float)5.5;
   //float h = 5+5.5f;
    //float h = (float)(5+5.5);
   System.out.println(g);           // g = 102

}

附加题目:

(1)

    int a = 100;
    byte b = 50;
    short c = a + b;//错误的。
注意:"byte 、short 、char 类型的变量在参与运算的时候,会自动类型提升为 int 类型"  "变量";等号的右边,如果是byte short char类型的变量参与运算的时候,会触发这个机制。

(2)

int x = 100;
long  y = 200;
int z = x + y;//错误的。

注意: “当两个不用类型相加时,如果byte short char 那么触发上一题的机制”
“如果是非这三种类型,提升为两者中的较大者。”

byte x = 3;
byte y = 4;
byte z = x + y;  //错误的。

注意:”byte short char 类型的变量在参与运算的时候,会自动类型提升为 int 类型” “变量”

byte zz= 3+ 4; //正确的。

触发:”常量优化机制。”在编译的时候,等号右边就变成了7.会检查7是否在左边的范围之中,如果在,就正确不报错的;如果不在,那么就报错。

6.字符串与整数的运算:

实质:就是字符串与数字的拼接,只有相加,没有相减、相乘、相除或取模。

    String s = "abc";
    System.out.println(s + 10);//abc10

    String s = "abc";
    System.out.println(10 + 10 + s);//20abc

7.&、|、&&、||的区别:

&&:两边都为真时,结果才是真
||:两边都为假时,结果才为假

&与&&结果一样,|与||的结果一样

不同点:&&和||具有短路效果;
当使用&&时,如果前半部为假,则半部不执行;
当使用||时,如果前半部为真,则后半部不执行;

&与|不具有短路效果,后半部一定会执行。

8.三元运算符/三元表达式:

数据类型 变量名 = 关系表达式 ? 表达式1 : 表达式2;
             int a = 10;
             int b = 20;

             a > b ? a : b;    //错的
             int result =  a > b ? a : b;    //对的
             System.out.println(result);

猜你喜欢

转载自blog.csdn.net/deskDopa/article/details/80992766