zoukankan      html  css  js  c++  java
  • day02(运算符)

    1.算术运算符

    (1)

    System.out.println(1+2+3+"hello"+1+2+3);  //输出6hello123,非6hello6或123hello123

    原因:*每次运算时都是一次从左到右依次取两个数据运算;

       *任何类型的数据与字符串连接,结果是字符串类型的数据,即当运算到6hello+1+2+3时,"6hello"为字符串类型。

    (2)

    System.out.println(10%3);    //1
    System.out.println(10%-3);   //1
    System.out.println(-10%3);   //-1
    System.out.println(-10%-3);  //-1

    原因:java取模运算中,结果的正负号取决于被除数。

    (3)自增自减

    int a,b;

    前自增:a = 2;  b=++a;  //a=3,b=3  (先自增,再使用)

    后自增:a = 2;  b=a++;  //a=3,b=2  (先使用,再自增)不完全正确,便于理解

    自减同理。

    int i = 0;
    i = i++;
    System.out.println('i='+i);    //输出i=0

    后自增咋JVM中的运行原理:因为后自增要使用到没有+1之前的值,那么jvm会先声明一个变量用于保存没有+1之前的值

    上面代码可分为三步:

    1*  int temp = i;  //声明一个临时变量用于记录i没有加1之前的值

    2*  自增 i = i + 1;  i = 1;

    3*  return temp;  //将temp作为表达式(i++)的结果  

    2.赋值运算符

    byte b1 = 1;
    byte b2 = 2;
    //b2 = b1 + b2;    //报错,需要强制类型转换
    b2 += b1;    //对,因为使用'+='符号在编译时,java编译器会自动进行强制类型转换

    3.比较运算符

    (1)==在比较两个引用数据类型变量时,比较的是两个变量的内存地址是否相同。

    (2)使用比较运算符的时候,要求两种数据类型必须一致。 byte、short、char 会自动提升至int;

    当两个不同数据类型的数据不兼容时,会报错(例如boolean与int)。

    (3)Instanceof  检查是否是类的对象 

    例:"hello"instanceof String  //true

    4.逻辑运算符

    (1)^  异或

    两边相同结果是false;   两边不同结果是true。

    (2)&&  (短路与)

    只有两边全为真的时候,结果才为真(同&),

    当左边为假的时候就没有必要在进行判断,所以&& 效率稍微高了一点。

    (3)|| (短路或)

    只要一边为真的时候,结果就为真(同|),

    当左边为真的时候就没有必要在进行判断,所以 || 比 | 效率稍微高了一点。

    5.位运算符(&、|、^、~)直接操作二进制位

    (1)

    System.out.println(6&3);    //2

      0110  //6

    &  0011  //3  

    .......................................

      0010  //2

    (2)~:取反,将1变成0,或将0变成1

    (3)^:异或

    规律:如果操作数A连续异或同一个数据两次,结果还是操作数A

    应用:对数据加密

    (4)可能会出现的笔试题目

    *交换两个变量的值

    方法一:(异或法)

    int a = 3;
    int b = 5;
    a = a^b;    //a = 3^5;
    b = a^b;    //b = (3^5)^5 = 3;
    a = a^b;    //a = (3^5)^3 = 5;
    System.out.println("a="+a+"b="+b); 

    方法二:(相加法)

    int a = 3;
    int b = 5;
    a = a+b;   // a = 3+5= 8;
    b = a-b;    // b = 8-5 = 3;
    a = a-b;    // a = 8-3 = 5;
    System.out.println("a="+a+"b="+b);

    *取出一个二进制数据的指定位数(取低四位)

    用&来解决,第四位为1,其余为0

    6.移位运算符

    (1)

    << 左移:左移n位,结果就是操作数乘以2的n次方;

    >> 右移:右移n位,结果就是操作数除以2的n次方,

    注意:左边补充位是1还是0,正数补充0,负数补充1;

    >>> 无符号右移:左边补充位都是0;

    (2)笔试题目:

    用最高效率算出2乘以8的结果:2<<3 = 2*(2^3) = 16;

    7.三元运算符

    (1)格式:布尔表达式?值1:值2;

    如果布尔表达式为true,运算后的结果是值1

    如果布尔表达式为false,运算后的结果是值2

    (2)注意:

    使用三元运算符的时候,一定要使用该表达式返回的结果,或者定义一个变量接受该表达式返回的结果;

    int age = 14;
    String result = age>=18?"成年人":"未成年人";
    System.out.println(result);
  • 相关阅读:
    JavaScript中的闭包
    正则表达式(括号)、[中括号]、{大括号}的区别
    写出将字符串中的数字转换为整型的方法,如:“as31d2v”->312,并写出相应的单元测试,正则去掉非数值、小数点及正负号外的字符串
    正则替换实现字符串链接每4位用“-”连接成新的字符串
    memcache搭建
    MySQL优化
    网络优化
    JDK配置及tomcat部署
    oracle中增加pga和sga
    sudo用法
  • 原文地址:https://www.cnblogs.com/stellar/p/5135992.html
Copyright © 2011-2022 走看看