博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java语法基础(二)----运算符
阅读量:5064 次
发布时间:2019-06-12

本文共 3186 字,大约阅读时间需要 10 分钟。

一、运算符:

运算符包括下面几种:

  • 算术运算符
  • 赋值运算符
  • 比较运算符
  • 逻辑运算符
  • 位运算符
  • 三目运算符

最不常用的是位运算符,但也是最接近计算机底层的。

1、算术运算符

(1)+的几种用法:加法、正数、字符串连接符

(2)除法的时候要注意一个问题:整数相除,只能得到整数。要想得到小数,可以将数据自身*1.0,即将数据自身先转换为浮点型。

 

2、赋值运算符

符号     =    +=  -=   *=  /=   %=

注:=为基本的赋值运算符,其他的为扩展的赋值运算符

面试题:

(1)short s=1, s = s+1;

(2) short s=1, s+=1;

上面两个代码有没有问题,如果有,哪里有问题?

答案:代码(1)是有错误的,会损失精度,byte,short在定义的时候,他们接收的其实是一个int类型的值。这个是自己做了一个数据检测的,如果不再它们的范围内,就报错。效果如下:

代码(2)没有错误,因为:扩展的赋值运算符其实隐含了一个强制类型转换

也就是说,i += 1;  不是等价于 i = i + 1; 而是等价于 i = (i的数据类型)(s + 1);

3、关系运算符

注1:比较运算符的结果都是boolean型,也就是要么是true,要么是false。

注2:比较运算符“==”不能误写成“=” 。举例:

4、逻辑运算符

(1)逻辑运算符用于连接布尔型表达式,在Java中不可以写成3<x<6,应该写成x>3 & x<6 。

(2“&”和“&&”的区别?同理, “|”和“||”的区别?

  • A:最终结果都一样。例如:A和B必须同时为真,A&B、A&&B的结果才为真。
  • B:&&具有短路效果,左边是false,右边不执行。||具有短路效果,左边是true,右边不执行。

注:开发中常用的逻辑运算符:  &&,||,!

(3)异或( ^ )与或( | )的不同之处是:当左右都为true时,异或的结果为false。

5、位运算符:

虽然开发中用的不多,但会在很多源码中看到,因为计算机底层的计算都是位运算。

面试题1:实现两个整数变量的交换

代码如下:

1 /* 2     面试题:请自己实现两个整数变量的交换 3 */ 4 class OperatorTest { 5     public static void main(String[] args) { 6         int a = 10; 7         int b = 20; 8          9         System.out.println("a:"+a+",b:"+b);10         11         //方式1:使用第三方变量(开发中用的)        12         int c = a;13         a = b;14         b = c;15         System.out.println("a:"+a+",b:"+b);16         System.out.println("------------");17         18         19         //方式2:用位异或实现(面试用)20         //左边:a,b,a21         //右边:a ^ b        22         a = a ^ b;23         b = a ^ b; //a ^ b ^ b = a24         a = a ^ b; //a ^ b ^ a = b25         System.out.println("a:"+a+",b:"+b);26         27         28         //方式3:用变量相加的做法        29         a = a + b; //a=3030         b = a - b; //b=1031         a = a - b; //a=2032         System.out.println("a:"+a+",b:"+b);33         *34         35         //方式4:一句话搞定36         b = (a+b) - (a=b); //b=30-20=10,a=2037         System.out.println("a:"+a+",b:"+b);38     }39 }

 

 

面试题2:请用最有效率的方式写出计算2乘以8的结果。

答案:2 * 8等价于2 << 3

知识回顾:

  •     <<:左移    左边最高位丢弃,右边补齐0
  •     >>:右移    最高位是0,左边补齐0;最高为是1,左边补齐1
  •     >>>:无符号右移 无论最高位是0还是1,左边补齐0

 

6、三目运算符:

格式:(关系表达式)?表达式1:表达式2;

如果条件为true,运算后的结果是表达式1;

如果条件为false,运算后的结果是表达式2;

示例:

获取两个数中大数:

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

 

获取三个整数中的最大值:

1         //方式一:分两步 2         //A:先比较a,b的最大值 3         //B:拿a,b的最大值在和c进行比较 4         int temp = ((a > b)? a: b); 5         //System.out.println(temp); 6         int max1 = (temp > c? temp: c); 7         System.out.println("max1:"+max1); 8          9         //方式二:一步搞定10         int max2 = (a > b)?((a > c)? a: c):((b > c)? b: c);11         //这种做法不推荐:12         //int max2 = a > b?a > c? a: c:b > c? b: c;13         //System.out.println("max2:"+max2);

建议用方式一 。另外,方式二中,第10行和第12行是一样的,是三目运算符的嵌套使用。

比较两个整数是否相等:

//比较两个整数是否相等         int m = 100;        int n = 200;                //boolean flag = (m == n)? true: false;        boolean flag = (m == n);        System.out.println(flag);

 

 

二 、键盘录入数据

我们目前在写程序的时候,数据值都是固定的,但是实际开发中,数据值肯定是变化的,所以,我准备把数据改进为键盘录入,提高程序的灵活性。

如何实现键盘录入数据呢?(目前先记住使用)

(1)导包(位置放到class定义的上面):import java.util.Scanner;

(2)创建键盘录入对象:Scanner sc = new Scanner(System.in);

(3)通过对象获取数据:int x = sc.nextInt();

代码举例:

 

 

 

我的公众号

想学习代码之外的软技能?不妨关注我的微信公众号:生命团队(id:vitateam)。

扫一扫,你将发现另一个全新的世界,而这将是一场美丽的意外:

转载于:https://www.cnblogs.com/qianguyihao/p/4143725.html

你可能感兴趣的文章
Unrecognized Windows Sockets error: 0: JVM_Bind 异常解决办法
查看>>
struts2中<s:form>的应用
查看>>
QML学习笔记之一
查看>>
7NiuYun云存储UploadPicture
查看>>
Window 的引导过程
查看>>
python与 Ajax跨域请求
查看>>
App右上角数字
查看>>
从.NET中委托写法的演变谈开去(上):委托与匿名方法
查看>>
小算法
查看>>
201521123024 《java程序设计》 第12周学习总结
查看>>
贪吃蛇游戏改进
查看>>
新作《ASP.NET MVC 5框架揭秘》正式出版
查看>>
在WPF中使用Caliburn.Micro搭建MEF插件化开发框架
查看>>
IdentityServer4-用EF配置Client(一)
查看>>
asp.net core系列 35 EF保存数据(2) -- EF系列结束
查看>>
WPF程序加入3D模型
查看>>
WPF中实现多选ComboBox控件
查看>>
读构建之法第四章第十七章有感
查看>>
android访问链接时候报java.net.MalformedURLException: Protocol not found
查看>>
dwz ie10一直提示数据加载中
查看>>