Java基础之运算符

一、概述

java运算符主要分为六大类:算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符和条件运算符。



二、算术运算符

Java的算术运算符主要有:加(+)、减(-)、乘(*)、除(/)、取余(%),当算术表达式中存在不同的基本数据类型的值的时候,整个算术表达式的类型会自动进行提升。

byte类型,short类型和char类型将被提升到int类型,不管是否有其他类型参与运算。

整个表达式的类型自动提升到与表达式中最高等级的操作数相同的类型

等级顺序:byte,short,char → int → long → float → double

从这个顺序我们可以看出byte、short、char是最低的,所以在程序开发中我们很少使用byte或者short类型定义整数。基本不会使用char类型定义字符,而使用字符串类型,更不会使用char类型做算术运算。

        int a = 2;       int b = 5;        System.out.println("a+b="+(a+b));        System.out.println("b-a="+(b-a));        System.out.println("a*b="+(a*b));        System.out.println("b/a="+(b/a));        System.out.println("b%a="+(b%a));
//当出现不同类型的数据时,因为float>int,所有结果会自动转为float型 float c = 2.2f; System.out.println("c+b="+(c+b)); System.out.println("b-c="+(b-c)); System.out.println("c*b="+(c*b)); System.out.println("b/c="+(b/c)); 输出: a+b=7 b-a=3 a*b=10 b/a=2 b%a=1 c+b=7.2 b-c=2.8 c*b=11.0 b/c=2.2727273

二、赋值运算符

赋值运算符主要有:=、+=、-=、*=、/=、%=、++、--,赋值运算符是将一个表达式的值赋值给左边,左边不能是一个常量,必须是可变的。

    int a = 2;//最常见的赋值    int b = 5;
int c = 0; c += b;//c=c+b System.out.println("c += b--->c="+c);//c=0+5 c -= a;//c=c-a System.out.println("c -= a--->c="+c);//c=5-2 c *= a;//c=c*a System.out.println("c *= a--->c="+c);//c=3*2 c /= a;//c=c/a System.out.println("c /= a--->c="+c);//c=6/2 c %= a;//c=c%a System.out.println("c /= a--->c="+c);//c=3%2

关于自增(++)与自减(--)详解

(1)(i++、i--)先赋值、再运算

(2)(++i、--i)先运算、再赋值

int i = 2;int a = i++;//先赋值再运算,即:先将i(此时i=2)赋值给a,再进行++运算i,i=i+1=3System.out.println(a);//输出2System.out.println(i);//输出3
int t = 2;System.out.println(t++);//先输出t(此时t=2),输出2System.out.println(t);//上一步已做了t++操作,所以输出3

int i = 2;int a = ++i;//先运算再赋值,即:先进行++运算i,i=i+1=3,再将i(此时i=3)赋值给a,System.out.println(a);//输出3System.out.println(i);//输出3
int t = 2;System.out.println(++t);//先进行++运算(此时t=t+1),输出3System.out.println(t);//上一步已做了t++操作,所以输出3

三、关系运算符

关系运算符主要有:==、!=、>、<、>=、<=,关系运算符一般称为“比较运算符”,通常用来比较两个常量或变量的大小,当运算符关系成立是,结果为true,否则为false。

关系运算符的优先级为:>、<、>=、<= 具有相同的优先级,并且高于具有相同优先级的 !=、==。关系运算符的优先级高于赋值运算符而低于算术运算符,结合方向是自左向右。

四、逻辑运算符

逻辑运算符主要有:&、|、^、!、&&、||。

(1)&和&&都表示与,有且仅当a、b都为true时,结果为true,&&有短路的效果,当第一个当前条件为false时,后面的条件就不执行,结果为false,&要对所有的条件进行判断

(2)|和||都表示或,有且仅当a、b都为false时,结果为false,||有短路的效果,当第一个当前条件为true时,后面的条件就不执行,结果为true,|要对所有的条件进行判断。

(3)异或(^)运算规则:当两边同为true或者同为false时,结果都为false;当两边为false和true时,结果为true。

int a = 10;int b = 20;float c = 2.1f;System.out.println((a<b) & (c>0));//先判断a<b为true,再判断c>0为true,结果为trueSystem.out.println((a>b) & (c>0));//先判断a>b为false,再判断c>0为true,结果为falseSystem.out.println((a>b) && (c>0));//因为a>b为false,所以后面c>0就不判断,结果为falseSystem.out.println((a<b) && (c>0));//因为a<b为true,所以继续判断c>0为true,结果为trueSystem.out.println((a<b) && (c<0));//因为a<b为true,所以继续判断c<0为false,结果为falseSystem.out.println((a>b) | (c>0));//先判断a>b为false,再判断c>0为true,结果为trueSystem.out.println((a>b) | (c<0));//先判断a>b为false,再判断c<0为false,结果为falseSystem.out.println((a>b) || (c>0));//因为a>b为false,所以继续判断c>0为true,结果为trueSystem.out.println((a>b) || (c<0));//因为a>b为false,所以继续判断c<0为false,结果为falseSystem.out.println((a<b) || (c>0));//因为a<b为true,所以后面c>0就不判断,结果为trueSystem.out.println(true ^ true);//结果为falseSystem.out.println(false ^ false);//结果为falseSystem.out.println(false ^ true);//结果为true

五、位运算符

位运算符主要有:~、&、&、^、>>、<<、>>>,位运算符主要针对二进制运算。运算时需要先将十进制转为二进制(注意一个字节有8位,前面需补0)

(1)与运算(&)

只有两个位同为1时,结果才为1,都在为0

int a = 16;//二进制为0001 0000int b = 20;//二进制为0001 0100System.out.println(Integer.toBinaryString(a));//输出其二进制0001 0000System.out.println(Integer.toBinaryString(b));//输出其二进制0001 0100System.out.println("a 和b 与的结果是:"+(a&b));//输出16

详解:

16:       0001 0000

20:       0001 0100  

值16:    10000

(2)或运算符(|)

两个位只要有一个为1,结果就是1,否则为0

int a = 19;//二进制为0001 0011int b = 22;//二进制为0001 0110System.out.println(Integer.toBinaryString(a));System.out.println(Integer.toBinaryString(b));System.out.println("a 和b 或的结果是:"+(a|b));//输出23

详解:

19:      0001 0011

22:      0001 0110  

值23:   0001 0111


(3)非运算符(~)

如果位为0,结果是1,如果位为1,结果是0。

int a = 4;//二进制为0000 0100System.out.println("a 非的结果是:"+(~a));//输出-5

详解:

4:       0000 0100  

值-5:  1111 1011

注意:二进制中,最高位是符号位   1表示负数,0表示正数

(4)异或运算符(^)

如果两个位相同,结果就为0,不同结果就为1

int a = 7;//二进制为111int b = 20;//二进制为10100System.out.println("a 和b 异或的结果是:"+(a^b));//输出19

详解:

7:       0000 0111

20:     0001 0100 

值19:  0001 0011

(5)左移运算符(<<)

就是将所有的位向左移动多少位

int a = 7;//二进制为111System.out.println("a 左移2位的结果是:"+(a<<2));//输出28

详解:

操作前00000111

左移后00011100

尾部补0,首位去0

a<<b  快速计算:  a << b  = a * 2b

(6)右移运算符(>>)

规则同左移运算符


六、条件运算符

关系表达式?表达式1:表达式2(相当于ifelse)

int a = 7;int b = 20;System.out.println(a>b?"a大于b":"a小于b");//a小于b


文末总结:

在我们平时实际开发中,我们要着重掌握算术运算符、赋值运算符中的自增自减和(+=、-=、=)、关系运算符、逻辑运算符的(&&、||、!),这些使用率非常高,位运算符的话一般情况下用的比较少,除了某些特定的技术。条件运算符相当于ifelse简写,能有效的简化代码,需要重点掌握。


想要学习了解关于集合的更多知识,可以点赞转发,关注公众号【Eric学习java】回复【ericjavabase1001】免费获取视频教程。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,657评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,662评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,143评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,732评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,837评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,036评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,126评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,868评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,315评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,641评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,773评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,859评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,584评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,676评论 2 351