Java运算符

1.运算符介绍

运算符分类

2.算数运算符

  • 二元运算符:+、-、*、/、%
    整数运算:
    (1)如果两个操作数有一个为long,则结果也为long;
    (2)没有long时,结果为int,即使操作数全为short、byte,结果也是int。
    浮点运算:
    (1)如果两个操作数中有一个为double,则结果为double;
    (2)只有两个操作数均为float,结果才为float。
    取模运算:操作数可以是浮点数,但一般使用整数,结果是“余数”,“余数”符号和左边操作数相同,如7%3=1,-7%3=-1,7%-3=1。
  • 一元运算符:++,--
byte a = 1;
int b = 2;
long b2 = 3;
//byte c = a + b;  //报错,不能把int类型赋给byte,报错
//int c2 = b2 + b;  //报错,不能把long类型赋给int,报错

//float f1 = 3.14;  //报错,3.14默认为double类型
double d = b +b2;  //不报错,表述范围从小到大时可以自动类型转换
//float d2 = f1 +6.2;  //报错,不能把double类型赋给float

System.out.println(-9%5);  //-4

int  a = 3;
int b = a++;  //先给b赋值,a再自增
System.out.println("a="+a+"\nb="+b);  //a=4,b=3
a = 3;
b = ++a;  //a先自增,再给b赋值
System.out.println("a="+a+"\nb="+b);  //a=4,b=4

3.赋值运算符及其扩展运算符

  • 赋值运算符:=
  • 扩展运算符:+=、-=、*=、/=、%=、

举例:
a+=b相当于a=a+b
a=b+3相当于a=a(b+3)

4.关系运算符

关系运算符的结果是布尔值,true或false。
关系运算符

(1)==和!=是所有(基本和引用)数据类型都可以使用;
(2)>、>=、<、<=仅针对数值类型以及char类型。

char b = 'a';
char b2 = 'c';
System.out.println((int)b);  //97
System.out.println(0+b2);  //99
System.out.println(b<b2);  //true

5.逻辑运算符

逻辑运算符

注:短路与和短路或采用短路的方式,从左到右计算,如果只通过运算符左边的操作数就能确定该逻辑表达式的值,则不会继续计算运算符右边的操作数,提高效率。实际应用中,短路与和短路或更常用。

boolean b1 = true;
boolean b2 = false;
System.out.println(b1&b2);
System.out.println(b1|b2);
System.out.println(b1^b2);
System.out.println(!b1);

//boolean b3 = 1>2&2<(3/0);  //报错,除数不能为0
boolean b3 = 1>2&&2<(3/0);  //短路与,第一个操作数的值为false,则不需要再计算后面的操作数
System.out.println(b3);  //false

6.位运算符

位运算符

(1)&和|既是逻辑运算符,也是位运算符。如果两侧操作数都是boolean类型,就作为逻辑运算符;如果两侧操作数均为整数类型,就是位运算符。
(2)^不是乘方运算,而是“异或”操作。

int a = 3;
int b = 4;
System.out.println(a&b);  //0
System.out.println(a|b);  //7
System.out.println(a^b);  //7
System.out.println(~a);  //-4

int c = 3<<2;  //左移两位,相当于乘4
System.out.println(c);  //12
System.out.println(12>>1);  //6,右移一位,相当于除以2

7.字符串连接符

  • 当+两边是数字时,表示加号;当+两边只要有一个为字符串时,它就表示字符串连接符。
String a = "3";
int b = 4;
int c = 5;
char d = 'a';
System.out.println(a+b);  //34
System.out.println(a+b+c);  //345
System.out.println(b+c+a);  //93
System.out.println(d+4);  //97+4=101

注:双引号表示字符串,单引号表示char。

8.条件运算符

语法格式:x ? y : z
其中x为boolean类型表达式,x为true则返回y,否则返回z,可以代替简单的if...else...

int score = 80;
int x = -100
String type = score<60?"不及格":"及格";
System.out.println(type);  //及格

//等价于
if(score<60){
    System.out.println("不及格");
}else{
    System.out.println("及格");
}

System.out.println(x > 0 ? 1 : (x == 0 ? 1 : -1));  //-1

9.运算符的优先级

运算符的优先级

(1)总的来说,算术运算符>关系运算符>逻辑运算符>条件运算符>赋值运算符;
(2)不需要死记硬背,优先使用小括号来组织表达式;
(3)逻辑运算符中,逻辑非>逻辑与>逻辑或。比如,a||b&&c的运算结果是a||(b&&c),而不是(a||b)&&c。

10.自动类型转换

  • 自动类型转换:指的是容量小的数据类型可以自动转换为容量大的数据类型。
    注:容量小/大指的不是字节大小,而是数据类型表示的范围,比如虽然long占8个字节,float占4个字节,但float表示的范围比long大,所以long可以自动转换为float。
  • 如下图所示,实线表示无数据丢失的自动类型转换,而虚线表示在转换时可能会有精度的损失。
    自动类型转换
  • 可以将整型常量直接赋给byte、short、char等类型变量,而不需要进行强制类型转换,只要不超出其表数范围即可。
int a = 324;
long b = a;
double d = b;
//a = b;  //报错,long类型不能转int
//long e = 3.24; //报错,double类型不能转long
//long e = 3.24F;  //报错,float类型不能转long
float f = 234234L;  //不报错,long类型可以转float

//特例
byte b2 = 123;  //不报错
byte b2 = 1230;  //报错,1230超过byte的表数范围

11.强制类型转换

注:可能会损失精度。

double x = 3.14;
int nx = (int)x;
System.out.println(nx)  //3,自动舍去小数部分

char c = 'a';
int d = c+1;
System.out.println(d);  //98
System.out.println((char)d);  //b

12.类型转换时的常见问题

  • 操作比较大的数时,要留意是否溢出;
  • 不要命名名字为l的变量,l容易与1混淆,long类型使用大写L,不要用小写。
int money = 1000000000;  //10亿
int years = 20;

int total = money*years;
System.out.println(total);  //-1474836480,超过int范围,发生了溢出

long total1 = money*years;
System.out.println(taotal1);  //-1474836480,默认是int,再转为long,但已超过int范围,发生了溢出

long total2 = money*((long)years);
System.out.println(total2);  //2000000000,正确

long total3 = 34L*54346*money;
System.out,println(total3);  //正确

13.使用Scanner获取键盘输入

import java.util.Scanner;

Scanner scanner = new Scanner(System.in);
System.out.println("请输入名字:");
String name = scanner.nextLine();
System.out.println("请输入你的爱好:");
String favor = scanner.nextLine();
System.out.println("请输入你的年龄:");
String age = scanner.nextInt();

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

推荐阅读更多精彩内容

  • 7. Java运算符 👯转载请保留原文链接:http://dashidan.com/article/java/ba...
    ef6a1aa99b35阅读 371评论 0 0
  • 表达式与运算符 表达式 表达式由运算符和操作数组成,根据运算符也可分为单目表达式、双目表达式、三目表达式 计算:表...
    若兮缘阅读 331评论 0 7
  • 计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量。我们可以把...
    海人为记阅读 128评论 0 0
  • 计算机的最基本的用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操作变量。我们可以...
    南风_001阅读 61评论 0 1