JavaSE之运算符

课前小例


package com.zpwd.chapter1;

public class HelloWord {
public static void main(String[] args) {
    // 整型
    // System.out.println(num1);//该行为错误写法
    int num1 = 10;
    // boolean num1= true; //该行为错误写法
    boolean num2 = true;
    System.out.println(num1+','+num2 )
    }
}

在方法中声明的变量成为局部变量*。
*同一个代码块不能声明名称相同的变量。
*在声明变量之前,不能使用该变量,因为代码是顺序执行的,JVM 在栈内存中找到main栈针时,找不到下方声明的变量(先声明后发现)。
*JVM内存三个重要的区域(共有5个区域):堆内存(heap)、栈内存(stack)、方法区
PS输出1的结果是:10,true。


赋值运算符:= 、+= 、-= 、*= 、/=

package com.zpwd.chapter1;

public class HelloWord {
public static void main(String[] args) {
    int num = 10;
    num += 10;
    System.out.println(num);//结果为:20
    }
}

num+=10的效果等同于num = num +10


算数运算符:+ 、- 、* 、/ 、% 、++ 、--

package com.zpwd.chapter1;

public class HelloWord {
public static void main(String[] args) {
    System.out.println(5 + 6 + 7); // 结果:18
    System.out.println(5 + "6" + 7);// 结果:567
    System.out.println(5 + 6 + "7");// 结果:117
    System.out.println(5 + 6 + '7');// 结果:66
            int v1 = 99;
    int v2 = 1;
    System.out.println("v1+v2=" + (99 + 1));
    System.out.println(v1 + "+" + v2 + "=" + (v1 + v2));

    // 整型除以整型,得到的结果还是整型,取整(非四舍五入)
    System.out.println(7 / 2);// 结果为:3
    System.out.println(7.0 / 2);// 结果为:3.5
    System.out.println(7 / 2.0);// 结果为:3.5

    // %取余数(模运算),结果的正负只与被除数的正负有关,小数%大数 = 小数
    System.out.println(5 % 2);// 结果为:1
    System.out.println(-5 % 2);// 结果为:-1
    System.out.println(5 % -2);// 结果为:1
    System.out.println(-5 % -2);// 结果为:-1
    System.out.println(-2 % -5);// 结果为:-2 

    // ++,--:自增,自减(变量 在原有的赋值上加一或者减一)
    int i = 0;
    i++;
    System.out.println(i);// 结果为:1 一般在循环中使用
    // ++在前,先自增再运算;++在后,先自增再运算
    int a = 1;
    int b = ++a;
    System.out.println(b);// 结果为2,a先自增变为2,再赋值给b
    int c = a++;
    System.out.println(c);// 结果为1,先将a的值1赋值给c,a再自增
    // 运行Java代码的时候,电脑会先运行JVM,Java虚拟机将.java文件、编译成.class文件
    // 栈内存:存放程序运行时所需的局部变量

    // 下列代码较为特殊,代码在执行时,JVM找到该条main栈针,内存会开辟一个临时空间,
    // 将x变量复制出一份,放在临时空间中,并进行自增操作,但原有的x值不变。程序执行
    // 完毕后,临时空间被自动回收。因此输出的x值并没有改变。(面试题经常出现)
    int x = 1;
    x = x++;
    x = x++;
    System.out.println(x);// 结果为1。
    }
}

!!注意以下几点:
1、算数运算符+有点小特殊,既可以表示两个数相加,又可以表示字符串的拼接,当+两边是数字时,表示相加;当两边是字符串时,表示拼接,既有字符串又有数字时还是起到拼接作用
2、两个整数相除时,得到的结果是取整(非四舍五入)。
3、两个数取模时,模的正负只与被除数有关;若小数%大数,得到的结果被除数(例:-4%5=-4)。
4、在做自增或自减运算时,运算符(++、--)在前面就表示先自增或自减再进行其他处理;若运算符(++、--)在后面时,则先做其他的再做自增或自减。


比较运算符:> 、 < 、== 、!=

package com.zpwd.chapter1;

public class HelloWord {
public static void main(String[] args) {
    int age = 22;
    if (age > 18) {
        System.out.println("成年人");
    }
    if (age < 18) {
        System.out.println("未年人");
    }
    if (age == 18) {
        System.out.println("18");
    }
    if (age != 18) {
        System.out.println("非18");
    }
    }
}

结果为:成年人 非18


逻辑运算符 :&& 、|| 、!

package com.zpwd.chapter1;

public class HelloWord {
public static void main(String[] args) {
    int age = 22;
    double height = 1.99;
    if (age > 18 && height > 1.8) {
        System.out.println("大于18岁且高于一米八");
    }
    if (age > 18 || height < 1.8) {
        System.out.println("大于18岁或高于一米八");
    }
    if (!(age > 18)) {
        System.out.println("不大于18岁");
    }
    }
}

结果为:大于18岁且高于一米八


位运算符 :& 、| 、^ 、~ 、>> 、<< 、>>>

package com.zpwd.chapter1;

public class HelloWord {
public static void main(String[] args) {
    int age = 22;
    // &,参加运算时,两位都为1才为1,否则都为0
    System.out.println(6 & 5);// 结果为:4
    //6的二进制 110,5的二进制101。结果为:100 ,100的十进制为4
    System.out.println(3 & 5);// 结果为:1
    // |,参加运算时,只有两位都为0才为0,否则都为1。
    System.out.println(5 | 6);// 结果为:7
    // ^,亦或:只要参加的运算的两位不同才为1,否则都为0。
    System.out.println(5 ^ 6);// 结果为:3
    // << :a<<b ,将a的二进制数据左移b位,右边移空的部分补0。
    System.out.println(4 << 4); // 结果为:4*(2的4次幂)
    }
}

!!位运算只是针对二进制的整数进行运算


条件运算符:判断表达式1 ? 数值1 :数值2

package com.zpwd.chapter1;

public class HelloWord {
public static void main(String[] args) {
    int a1 = 10;
    int a2 = 4;
    int a3 = a1 > a2 ? a1 : a2;
    System.out.println(a3);//结果为:10
    
    a3 = 999<1?a1:a2;
    System.out.println(a3);//结果为:4
    }
}

表达式1中的数值,与?后面的表达式2中的数值没有任何关系。


面试题

1、按位与&,按位| 和逻辑与&&,逻辑或||的异同点。

  • 都能进行逻辑判断。
  • 按位与&,按位|能参加按位运算。
  • 逻辑与&&,逻辑或||具有短路特性。
    2、请给出下列的输出结果。
    int x = 1;
    x = x++;
    x = x++;
    System.out.println(x)
  • 结果为:1
    3、两个数互换位置(不使用临时变量)
    4、如果快速的让2等于8。
    2<<2(位运算是二进制运算,计算机本身识别的就是01代码,不需要翻译,直接交给计算机,所以效率最快)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容