zoukankan      html  css  js  c++  java
  • Java基础-运算符(03)

    概念:

    运算符:就是对于常量和变量进行操作的符号.

    表达式:用运算符连接起来的符合java语法的式子,不同的运算符连接的表达式是不同类型的表达式.

    运算符分类:

    算数运算符(+  -  *  /  %  ++  --)

    赋值运算符(= += -= *= /=)

    关系运算符(==,!=,>,>=,<,<=)

    逻辑运算符(&,|,!,^,&&,||)

    三元运算符

    算数运算符

    整数相除只能得到整数.要想得到小数,就必须有浮点数参与运算.

    字符参与加法运算(纯数值的为加法运算,含有字符串的为字符连接,char->int->string),其实是那字符在计算机中的存储的数据值(ASCII码表)来参与运算的

    'A'    65
    'a'    97
    '0'    48
    
    int a =10;
    char c = 'A';
    System.out.println(a+c);    //结果为75

     算数运算符++  --之中的小问题.是从左向右计算,然后在向左赋值

    int x = 4;
    int x2 = 4;
    int y = (x--)+(--x)+(x*10);      //4+2+20=26 (x--)值为4,x为3;然后(--x)值为2,x为2;
    int y2 = (--x2)+(x2--)+(x2*10);  //3+3=26 (--x2)值为3,x2为3;然后(x2--)值为3,x2为2;
    System.out.println("x = " + x + ",y = " + y+ ",y2 = " + y2); //x = 2,y = 26,y2 = 26

    算数运算符++ --之中的天坑

    int a=1,b=0;    
    b=a++;     //先赋值再进行自加一运算
    这段程序结果得, b=1,a=2   
    
    int a=1;    
    a=a++;    //a先把值赋给自己为1,然后a再加1
    这段程序结果得, a=1,很奇怪有木有???

    这里涉及到操作系统的知识,简单说一下:我们平时的变量和对象都是在内存中开一块内存的.而运算只有cpu能运算.这个题目里面的坑是a把值赋给本身后自加一时的运算仅仅只在cpu中,计算的结果存在了寄存器中,并没有赋给内存中的变量.

    也就可以理解为:=赋值运算符就是把cpu寄存器中的结果存到内存中去;

    赋值运算

    基本的复制运算符:=

    扩展的赋值运算符:+= -= *= /=...

    +=拿左面的和右边的数据做+,然后把结果赋值给左边

    注意:扩展的赋值运算符,隐含了强制类型转换,强制类型为左面的类型

    例如:变量a,a+=10;相当于a=(a的数据类型)(a+10);

    关系运算符

    ==,!=,>,<,>=,<=

    关系运算符的结果是boolean类型.

    逻辑运算符

    逻辑运算符是用来连接关系表达式的

    &,|,!,^(异或相同则false,不同则true,可以理解为情侣关系,性别相同的不是情侣,性别不同的是情侣)

    &&(和&结果一样),||(和|结果一样)

    三元运算符

    关系表达式?表达式1:表达式2

    A.计算关系表达式的值,看是true还是false    B.如果是true,表达式1就是结果;如果是false,表达式2就是结果

    三元运算符也是返回值的.

     

    //根据判断给result赋值 
    result = n>=90?'A':(n<60?'C':'B');
    //切勿写成 n>=90?result='A':(n<60?result='C':result='B');
            short s = 30;
            int i = 50;
            //s = i+s;  //报错 cannot convert from int to short
            s += i;    //+=赋值运算符有显示类型转换功能,相当于s=(short)s=i;!!!
            System.out.println("s="+s);   //80
            int x = 0;
            int y = 0;
            int z = 0;
            boolean a,b;
            a = (x>0) & (y++>1); //false&false
            System.out.println("a="+a); //false
            System.out.println("y="+y); //1
            b = (x>0) && (z++>1);  //false第一个false那么第二个就不运算
            System.out.println("b="+b);  //false
            System.out.println("z="+z);  //所以此处为0,而不是1
            a = (x>0) | (y++>1);    //false|false
            System.out.println("a="+a);   //false
            System.out.println("y="+y);   //2
            b = (x>0) || (z++)>1;    //false||false短路运算,第一个为true时第二个不运算
            System.out.println("b="+b);   //false
            System.out.println("z="+z);   //1
  • 相关阅读:
    如何防止源码被盗
    C# WebBrowser 获得选中部分的html源码
    特殊字符和空格
    MySQL性能优化
    mysql5.7新特性探究
    【九】MongoDB管理之安全性
    【八】MongoDB管理之分片集群实践
    【七】MongoDB管理之分片集群介绍
    【六】MongoDB管理之副本集
    【五】MongoDB管理之生产环境说明
  • 原文地址:https://www.cnblogs.com/aeolian/p/7714153.html
Copyright © 2011-2022 走看看