A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 仙兒哥 中级黑马   /  2013-4-10 02:12  /  1582 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

5.1 算术运算符 +, -, *, /, %, ++, --
做运算时要遵循下面三个规则
1.当两个变量做运算,结果的类型一样,那么结果与其类型一样
                2.当两个变量做运算,结构的类型不一样,其结果取精度高的类型
                3.如果byte short char 三种数据类型做运算,会先将自己转成int再参与运算
                4. 当char类型做运算时是将其对应的码值取出做运算

加号:在操作数字,字符,字符串时是不同的,两个字符想加得到的是码表值,两个字符串相加是将字符串链接在一起
除号:整数在使用除号操作时,得到的结果仍为整数(小数部分忽略)
取模:模数(%右边的数)的符号忽略不计,结果的正负取决于被模数(%左边的数)
自增:符号在前就先运算后取值,符号在后则是先取值后运算

       
        %运算
                        左边小于右边,结果等于左边                例4%5=4
左边等于右边,结果等于0                        例5%5=0
有负数参与运算结果只参考左边         例-4%5=-4
                如果出现负数,那么结果只与左边数的正负有关 ,做运算时通过绝对值操作

        ++在前,++在后的区别
前缀++a:先做自减(加),在参与运算  
                后缀a++:先赋值做运算,在自加(减):

                举例
int a = 3,b;
a++,++a                                                                //如果a++或++a单独存在不参与其他运算相当a+1        ,a输出结果 4
b= a++                                                                //a在前面a先出去运算把值赋予b, 然后a再自增        a,b输出结果4,3
b= ++a                                                                //如果++在前就先算1+a=4 再赋值给b                a,b输出结果4,4

        操作符合目(元)的概念
                a+b  我们将+叫二目(元)运算符
                ++与其--是一元运算符

字符数据运算的特点
连接符( + )
“字符串”和任何数据 + 就是相连接 连接完拼成新的字符串        (特殊情况‘字符”和数字 + 结果等于数字,因为有编码表的存在)

打印相应数字在unicode中对应的字符方法System.out.println((char)(121));
打印一个中文对应本机码表中的数字方法char a='我';        System.out.println((int)a);

System.out.println(“5+5=”+5+5)                        //输出结果为5+5=55;         其中有2次运算        先运算”5+5=5”再运算”5+5=55”
System.out.println(“5+5=”+(5+5))                //输出结果为5+5=10        后面的(5+5)增加了括号增加了优先级
int a = 3,b;
b= a++                                                                //相打印a=4,b=3 System.out.println(a+”,”+b)结果只是4,3 只要在加字符串即可(“a=”+a+’,’+”b=”+b)
System.out.println(“a=”+a+”,”+”b=”+b)        //如果(a+”,”+b)错些为(a+’,’+b)结果出错 ‘.’字符型不能加int型

举例
System.out.println(‘a’+1)                                        //’a’是字符型 1是int型,类型不一致不能运算
                                                                                //Unicode中任何一个字符都占2个八位2个字节,1是int型占4个八位,        ‘a’就自动类型提升了变成数字97


5.2 赋值运算符 =, +=, -=, *=, /=, %=
赋值运算符
                =        //右边赋给左边
+=        //把左右两边的和赋给左边       
-=        //把左右两边的差赋给左边
*=        //把左右两边的积赋给左边
/=        //把左右两边的商赋给左边
%=        //把左右两边的模赋给左边

赋值运算规则
                运算规则是从右到左,优先级是最低的
                使用这些简化运算符不需要考虑类型转换问题,内部完成了一个强制转换的操作

举例
x=3;
x+=5;可理解成把”+=”(看成一个符号)两边的和赋给左边

笔试题
                        short s=1;
s=s+1;是否正确                         //错误s+1得到的结果是int类型,不能在赋值给s因为s是short类型
如果写成s+=1;是否正确        //正确s+=1; s+=1;在内部的完成了一个强制转换的操作,相当于s=(short)(s+1);

笔试题
不利用第三个变量,用一行代码交换2个变量的值

2 个回复

倒序浏览


5.3 比较运算符 ==, !=, <, >, <=, >=, instanceof

                比较运算符规则                                        //所有比较运算符看成一个整体就对了 跟纸上写法不同而已
1.        比较运算符操作得到的结果是boolean类型结果,要么true要么false
举例
System.out.println(3==4);//就是在计算3相等于4否,结果不是ture就是false
                        2.> < >= <= 它们只能操作数
                        3.== != 不仅可以操作数,也可以操作其它类型数据

                ==,=注意
                        代码中要做相等比较时用==,不要使用=,单等代表赋值

                instanceof
                        检车一个对象是否是某一个类的实例
5.4 逻辑运算符 &, |, ^, !, &&, ||
逻辑运算概念
其实就是关系运算,逻辑运算符2边连接的肯定是布尔型表达式,运算完要么真要么假的表达式
逻辑运算不是比较运算 而是另多个表达式建立联系的符号
判断条件用的,最终目的是看多个条件相比结果是真是假

& 与(并且)                        两边的布尔型表达式的结果,两边全true结果为true,否则为false
true&true=true        //老师叫小强小明过来,都来了老师才爽,有一个没来就不爽
true&false=false
false&true=false
false&false=false
                                                举例
x=4;  
x>3&x<6; //Java中不能出现6>x>3,为了把2个表达式建立联系就用到了逻辑运算符

| 或(要么)                        两边的布尔型表达式的结果,两边全false结果为false,否则为true
                                                true|true=true                        //小强小明,两人来了
true|false=true                        //或者其中一个来
false|true=true                        //或者其中一个来
false|false=false                //一个也没来不行
                                                        举例
                                                x=4
3<=x | x>=6;        //x要么小于等于3 要么大于等于6


! 非                                两边的布尔型表达式的结果,取反,判断事物的另一面,非真即假,非假即真
                                                !true=false
                                                !false=true

^ 异或                                两边的布尔型表达式的结果,两边相同就为false 两边不同就为true
                                                true^true=false        //两边变相同不高兴了false
true^false=true        //两边不同才高兴true
false^true=true
false^false=false

&&        短路与                        两边的布尔型表达式的结果,左边为真,右边运算(因为左边为真右边结果会影响总结果),左边为假右边无论真假都不运算(短路)
                                                int x=7;
x>3 && x<6;
                                                System.out.println(x);

|| 短路或                        两边的布尔型表达式的结果,当左边为真,右边不运算(因为或运算有一个为真即可,左边为真右边真假都不影响总结果)


        笔试题单与&&双与&&,单或|双或||的区别
&,&& 单与和双与的区别
单与&,在计算机中将整个式子全运算完后得到结果
双与&&,左边为真,右边运算, (因为左边为真右边结果会影响总结果)左边为假右边无论真假都不运算(短路)

|,|| 单或和双或的区别
单或|,在计算机中将整个式子全运算完后得到结果
双或||,当左边为真,右边不运算(因为或运算有一个为真即可,左边为真右边真假都不影响总结果)

                                                举例
                                                        System.out.println("短路效果");
                                                        int a=10;
                                                        int b=5;
                                                        boolean flag=(a>b)&&(a++>5);  //通过a>b  可以确定整个式子的结果
                                                        System.out.println(flag);
                                                        System.out.println(a);                        //a的值不改变,有&&右边短路,提高效率

                                                        int a=10;
                                                        int b=5;
                                                        boolean flag=(a>b)&(a++>5);  //通过a>b  可以确定整个式子的结果,但是后面式子也会运算
                                                        System.out.println(flag);
                                                        System.out.println(a);                        //a的值改变,计算机要把两边运算完再比较结果,效率低

                                        所以开发中用&& ||比较多, 短路与短路或提高了效率,因为右边可以根据情况不做运算

与或优先级
        &&优先级高
                System.out.println(false && true || true);
                System.out.println(true || true && false);

                                                                                                         
5.5 移位运算符<<, >>, >>>
关于位运算符                        //使用位运算符在内存中运算速度比较快
操作二进制数的, 0代表false假,1代表true真,非0为真,与逻辑运算符规则一致,

位运算符好处
对二进制数进行操作的运算符 这样的方法在内存中运算速度比较快,效率高 开发用不多,但面试多


位运算符怎么用?

什么时候用?

<< 左移                       
左移就是该数乘以2的次幂的过程(移几次就是几次幂) 左边舍弃,右边用0补 举例3 << 2 = 12 --> 3*2*2=12
举例
int x=5;
x=x<<3;                //5乘2的3次幂=40

>> 右移                       
右移就是该数除以2的几次幂的过程(移几次就是几次幂) 右边舍弃,左边为0用0补,为1用1补 举例3 >> 1 = 1  --> 3/2=1
举例
int x=6;
x=x>>1                //二进制位最高位空什么,空位就补什么

>>>         无符号右移
相当于除以2操作 右边舍弃,左边高位永远用0补 常用于取二进制中的数据        举例3 >>> 1 = 1 --> 3/2=1
举例
int x=6;
x=x>>>1                //右移出的空位无论最高位是什么右移出的空位都补0怎么移动都是正数
5.6 位运算符 &, |, ^, ~
& 与运算
如果有一个为0 结果为0,好处可以对二进制数中的1进行获取 因为其中有0结果就不可能为1了        举例6 & 3 = 2

| 或运算
如果有一个为1 结果为1,一般对某些数据进行加密解密,或者右移左移的时候对调整这个位运算数据结果的时候用,举例6 | 3 = 7

^ 异或运算
相同为0 不同为1,一个数异或同一个数2次结果还是该数本身,用途加密,异或数是几其他人不知道,该数放U盘中就是U盾

~ 反码
把这个数的二进制数1变0 0变1,,举例~6 = -7

5.7 三元运算符 ? :
三元运算符概念               
三个元素参与运算的符号

三元运算符格格式
结果 =  (条件表达式) ? (表达式1) : (表达式2) ;
如果条件为真,运算冒号后的结果是表达式1;将结果赋给等号左边
如果条件为假,运算冒号后的结果是表达式2; 将结果赋给等号左边

                举例
获取两个数中大数
int x=3,y=4,z;
z = (x>y)?x:y;                //z变量存储的就是两个数的大数

public int finalMax(int a,int b,int c)
                                {
                                  int max =a >b?a:b;
}


码表问题
(ASCII,gb2312,GBK,GB18030,unicode)
任何国家码表一般都兼容ASCII码表
Java中定义’字符’用的就是unicode码表        Unicode中任何一个字符都占2个八位
Java中定义“字符串”用的是本机默认的码表
回复 使用道具 举报
学习一下,感谢分享!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马