java中的运算符

1、算术运算符 + - * / % Arithmetic operators
+ 运算符有三种身份 Additive Operator
1)加法:如 a + b;
2)连接:如 “北京” + 2008 ---》 北京2008
3)正号:如 +a; int a = 5, a = +5;

- 运算符有两种身份 Subtraction Operator

1)减法:如 a - b;

2)负号:如 -a; int a = 5, a = -5;

* 运算法有一种身份 Multiplication Operator
乘法 a * b;

/ 运算符有一种身份 Division Operator
除法 a / b;

注意:当/的左右两边都为整数时,结果也将为整数,即使真实结果是小数。

% 运算法有一种身份 Remainder Operator
取模运算。
如:a % b, 表示a/b然后取余数。

练习:请使用/ 和 % 运算符,将数字1234的各位数字分离出来。

 public class Test1 {
public static void main(String[] args) { int a = 1234;
int g;
int s;
int b;
int q; q = a / 1000;
System.out.println("1234的千位上是:" + q); b = (a % 1000) / 100;
System.out.println("1234的百位上是:" + b); s = (a % 1200) / 10;
System.out.println("1234的十位上是:" + s); g = (a % 1230);
System.out.println("1234的个位上是:" + g); }
}

2、赋值运算符 = Asssignment Operators

格式:
变量 = 表达式;
作用:
将等号右边表达式的值赋给左边的变量存放。
如:int a = 5 * 6 +3;

3、自增、自减运算符 ++、 -- increment operator\decrement operator
格式:
变量++ 或 ++变量;
变量-- 或 --变量;
前加: ++a; 规则:先增加后使用(赋值)
后加: a++; 规则:先使用后增加
注意:无论是前加还是后加,a的值都会增加1

如:a = 5;
b = a++;
结果为:
b = 5, a = 6;

又如:
a = 5;
b = ++a;
结果为:
b = 6, a = 6;

练习1:a = 2;
a = a++;
结果为:
a = 2;
其运算过程为:
1) 将a中的内容取出,放在临时的存储单元中;
2) a本身的存储单元内容2自增1变成3;
3) 临时存储单元的值2,存入变量a的存储单元中,正号覆盖了原来的数值3;
所以a = 2;
练习2: a = 2,
b = a++ + a++ + a++;
其结果为:
a = 5;
b = 9;
其运算过程为:
1) 第一个a++运算,将a取出为2;然后a+1=3;
2) 计算第一个 + 双目运算符,左边为2 ,右边为3,结果为5;
3) 此时a = 3;重复第1) 2)步的操作,得到a = 5,b = 9.

 public class Test2 {
public static void main(String[] args) { int a = 2;
a = a++;
System.out.println("a = " + a); int c = 2;
int b;
b = c++ + c++ + c++;
System.out.println("c = " + c + "\n" + "b = " + b); }
}

4、关系运算符 >, <, >=, <=, ==, !=, instanceof ----- Relation operators

如:boolean flag = 'a' instanceof char;

 public class OpTest1 {
public static void main(String[] args) {
int b = 200000;
int a = 300;
boolean bFlag;
bFlag = b > a;
System.out.println(b + "大于" + a + "?\n" + bFlag); bFlag = b < a;
System.out.println(b + "小于" + a +"? \n" + bFlag); bFlag = (b >= a);
System.out.println(b + "大于等于" + a + "?\n" + bFlag); bFlag = (b <= a);
System.out.println(b + "小于等于" + a + "?\n" + bFlag); bFlag = (b == a);
System.out.println(b + "等于" + a + "?\n" + bFlag); bFlag = (b !=a );
System.out.println(b + "不等于" + a + "?\n" + bFlag);
}
}

5、逻辑运算符:&与、|或、!非、&&短路与、||短路非 ----- Logic operators

1) &与
格式: 表达式1 & 表达式2
规则:当&符号两边的表达式均为true时,与运算表达式的值为true;反之为false.
2) |或
格式:表达式1 | 表达式2
规则:当|符号两边的表达式有一个为true时,|运算表达式的值为true;反之为false.
3) !运算
格式:!表达式
规则:当表达式为true是,费运算结果为false;反之为true.
4) && 短路与
格式: 表达式1 && 表达式2
规则:当&&符号的两边表达式值都为true时,短路与的值为true;反之为false.
注意:当短路与的表达式1为false时,表达式2中的操作将不再执行。因此提高了代码的运行效率。
5)|| 短路或
格式: 表达式1 || 表达式2
规则:当短路或符号两边的表达式有一个为false时,短路或的值为false;反之为true.
注意:当短路或的表达式1为true时,短路或将直接被赋值为true,表达式2中的代码将不再执行。
从而提高了代码的运行效率。

 public class LogicOp {
public static void main(String[] args) { /*
逻辑运算符:&与、|或、!非、&&短路与、||短路非
1) &与
格式: 表达式1 & 表达式2
规则:当&符号两边的表达式均为true时,与运算表达式的值为true;反之为false.
2) |或
格式:表达式1 | 表达式2
规则:当|符号两边的表达式有一个为true时,|运算表达式的值为true;反之为false.
3) !运算
格式:!表达式
规则:当表达式为true是,费运算结果为false;反之为true.
4) && 短路与
格式: 表达式1 && 表达式2
规则:当&&符号的两边表达式值都为true时,短路与的值为true;反之为false.
注意:当短路与的表达式1为false时,表达式2中的操作将不再执行。因此提高了代码的运行效率。
5)|| 短路或
格式: 表达式1 || 表达式2
规则:当短路或符号两边的表达式有一个为false时,短路或的值为false;反之为true.
注意:当短路或的表达式1为true时,短路或将直接被赋值为true,表达式2中的代码将不再执行。
从而提高了代码的运行效率。 */ int a = 4;
int b = 6;
System.out.println("a = " + a);
//boolean bl = (6 < a) & (6 > ++a); // &运算符
//boolean bl = (6 < a) | (6 == ++a); // |运算符
//boolean bl = !(6 > a); // !运算符
//boolean bl = (6 < a) && (6 > ++a); // &&短路与运算符
boolean bl = (6 < a) || (6 > ++a); // ||短路或运算符 System.out.println("b1 = " + bl);
System.out.println("a = " + a); }
}

6、三目运算符 Ternary Operator

格式:
表达式0 = 表达式1 ? 表达式2 :表达式3
规则:
当表达式1的值为true时,表达式0的值为表达式2的值,否则,表达式0等于表达式3的值。

练习1:通过三目运算符,使用一个语句比较任意三个整数的大小,并将最大值赋给三目运算符。
练习2:写一个比较两个数大小的方法,并用该方法标胶任意三个整数的大小。

 public class TernaryOp {

     /*
三目运算符 Ternary Operator
格式:
表达式0 = 表达式1 ? 表达式2 :表达式3
规则:
当表达式1的值为true时,表达式0的值为表达式2的值,否则,表达式0等于表达式3的值。
*/ public static void main(String[] args) { int a = 8;
int b = 8887;
int c = 8392884; //练习1的实现方法
int max = (a > b ? a : b) > c ? (a > b ? a : b) : c;
System.out.println(a + "," + b +","+ c + "中的较大者是:" + max); //练习2的实现方法
int middleOne = maxNum(a,b);
int theMax = maxNum(middleOne,c);
System.out.println(a + "," + b +","+ c + "中的较大者是:" + max); } public static int maxNum(int x, int y) { int z = x > y ? x : y;
return z; } }

7、扩展赋值运算符 +=, -=, *=, /=, %= Extended Assignment operators

 public class AssignOp {
public static void main(String[] args) { /*
扩展的赋值运算符 Extended Assignment Operators
+= -= *= /= %=
作用:可以自动对数据类型进行转换后参与计算。
*/ byte b = 127;
short s = 489;
int a = 10000;
float f = 3.14f; b += 1;
//b = b + 1; //将抛出异常 “不兼容的类型: 从int转换到byte可能会有损失” 因为这里试图将int型数据赋值给byte类型
System.out.println("byte b 用 += 赋值运算符后 b = " + b); s -= 30;
//s = s - 30; //将抛出异常 "不兼容的类型: 从int转换到short可能会有损失” 因为这里试图将int型数据赋值给short类型
System.out.println("short s 用 -= 赋值运算符后 s = " + s); a /= 1.0;
System.out.println("int a 用 /= 赋值运算符后 a = " + a); f *= 2.0;
//f = f * 2.0; // 将抛出异常 “不兼容的类型: 从double转换到float可能会有损失” 因为这里试图将double类型数据赋值给float类型
System.out.println("float f 用 *= 赋值运算符后 f = " + f); }
}

8、数据类型的转换

1) 自动转换
小类型数据赋值给大类型时,将自动转换为大类型数据;
使用扩展复制运算符时,也会将等号右边的数据进行自动转换。
2) 强制转换
大类型数据赋值给小类型是,需要对大类型数据进行强制转换。
如:
byte b = 120;
int a = b; ---自动转换

int a = 120;
byte b = (byte)a; ---强制转换才行,否则将在编译时抛出损失精度异常

9、在java中,表达式的数据类型如何确定?
1) 表达式中有double数据时,表达式为double类型;
2) 表达式中没有double,但是有float时,表达式为float类型;
3) 表达式中没有double,也没有float, 但是有long时,表达式为long类型;
4) 表达式中没有double, float,和 long时, 表达式为int类型。

10、Math类
Math.abs();
Math.sqrt();
Math.pow(double a, double b);
Math.round(double a);
Math.ceil(double a);
Math.floor(double a);
Math.random();

练习1、产生一个[-100,100]之间的随机整数;
练习2、产生一个[321,9999]之间的随机整数;
练习3、产生一个四舍五入,保留两位小数的随机型数据,其范围是[0, 100]。

 public class HomeWork1 {
/*
产生一个 [-100, 100] 范围的随机整数。 注意:random产生的随机数是 [0,1) 一个左闭右开区间
*/ public static void main(String[] args) { int temp = 0; temp += Math.floor( 201 * Math.random() - 100 ); System.out.println("temp = " + temp); } }
 public class HomeWork2 {

     /*
练习2: 产生一个 [321, 9999] 范围的随机整数。
*/ public static void main(String[] args) {
int temp = 0;
temp += Math.floor( Math.random() * 10321 - 321 );
System.out.println("temp = " + temp);
} }
 public class HomeWork3 {
/*
练习3:产生一个四舍五入,保留两位小数的随机型的double数, 其范围是[0, 100] 。
*/ public static void main(String[] args) { double temp = 0;
temp += Math.round( 10000 * Math.random() ) ;
temp /= 100; System.out.println("temp = " + temp); }
}

练习三有一个疑问:

当随机数取出后,当两位小数的末尾为0时,最后一位0没有显示输出。

如:29.20会显示成29.2,这是为什么?

尚学堂 JAVA Day3 概念总结的更多相关文章

  1. 尚学堂 JAVA DAY11 概念总结

    1.冒泡排序算法 <升序排列> 思路1: 数组长度为n,那么要对数组进行n-1次遍历; step 1---从数组的第一个数开始,两两比较,如果第一个数 > 第二个数,将二者进行交换: ...

  2. 尚学堂 JAVA Day1 概念总结

    1.什么是计算机语言?一些符号,这些符号按照计算机硬件结构可以理解的方式排列组合,方便人与计算机,计算机与计算机之间进行信息的交换. 2.什么是机器语言?就是简单的二进制0和1的组合.该语言是计算机硬 ...

  3. 尚学堂 JAVA DAY12 概念总结

    面向过程和面向对象的区别.(5 分)面向过程就好像:一位父亲吩咐自己8岁的小儿子去买啤酒.他需要考虑儿子从出门后的每一个步骤,叮嘱儿子出门怎么走,如何过马路,到了超市如何找到酒水区,怎么识别需要的品牌 ...

  4. 尚学堂JAVA基础学习笔记

    目录 尚学堂JAVA基础学习笔记 写在前面 第1章 JAVA入门 第2章 数据类型和运算符 第3章 控制语句 第4章 Java面向对象基础 1. 面向对象基础 2. 面向对象的内存分析 3. 构造方法 ...

  5. 尚学堂Java第一课

    今天是北京尚学堂郑州分校开课的第一天,小班面授教学. 我很兴奋,是一个小白对IT大神渴求传道授业解惑的兴奋. 杨老师还是一贯耐心详细的手敲了第一堂课的完整大纲,必须给杨老师赞赞赞!!! 从幽默的制定班 ...

  6. 尚学堂Java面试题整理

    博客分类: 经典分享   1. super()与this()的差别? - 6 -  2. 作用域public,protected,private,以及不写时的差别? - 6 -  3. 编程输出例如以 ...

  7. 尚学堂java答案解析 第一章

    本答案为本人个人编辑,仅供参考,如果读者发现,请私信本人或在下方评论,提醒本人修改 一.选择题: 1.C 解析:java为了安全,中并没有引入C语言的指针概念. 2.AD 解析:B:Java先通过ja ...

  8. 尚学堂 JAVA Day13 abstract 关键字

    Abstract (抽象的) 这是一个关键字. 可以且只可以 用来修饰 <类> <方法>. 1---Abstract 类 如:Animal,可以被理解一个抽象的类.动物嘛,只是 ...

  9. 尚学堂java 参考答案 第九章

    一.选择题 1.AC 解析:A.注意题目是Collections不是 Collection,前者是一个until下的类,后者才是接口 C.Set中的数据是无序且不能重复的 2.A 解析:将发生数组越界 ...

随机推荐

  1. 化繁为简,无需后端。巧用Yql+rss,搭建我的个人网站

    [本文含有大量的心理描写,没耐心的看官直接跳转到末尾即可] 前言: 最近做好了个人网站.很多人都喜欢用WordPress弄一个自己的博客之类的,但其实我觉得没这个必要,Lofter的功能.界面神马的于 ...

  2. HDU 5033 Building(单调栈维护凸包)

    盗张图:来自http://blog.csdn.net/xuechelingxiao/article/details/39494433 题目大意:有一排建筑物坐落在一条直线上,每个建筑物都有一定的高度, ...

  3. css.day04.eg

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. javascript原型prototype的一个你不一定知道的理解

    原型和原型链的故事 相关文章: 为什么原型继承很重要 先来看看一段小代码用以引入要讲的小故事. function Foo() {}; var f1 = new Foo(); Foo.prototype ...

  5. java中判断两个字符串是否相等的问题

    我最近刚学java,今天编程的时候就遇到一个棘手的问题,就是关于判断两个字符串是否相等的问题.在编程中,通常比较两个字符串是否相同的表达式是“==”,但在java中不能这么写.在java中,用的是eq ...

  6. C# 实现文件夹的复制以及删除

    代码来源:http://blog.163.com/u_tommy_520/blog/static/20406104420147493933662/ http://www.cnblogs.com/lov ...

  7. 给div命名,使逻辑更加清晰

    在上一小节中,我们把一些标签放进<div>里,划分出一个独立的逻辑部分.为了使逻辑更加清晰,我们可以为这一个独立的逻辑部分设置一个名称,用id属性来为<div>提供唯一的名称, ...

  8. 多核CPU利用测试

      一直在想程序上是否特意让线程在指定的CPU上去运行,这样可以提高运行效率,所以特地写个代码让CPU使用率画正弦曲线的实验,我使用的是AMD X4 641的CPU,为四核四线程的片子. 代码如下 # ...

  9. 3.AOP入门1

    1.定义1.1基本概念2. 1.定义 1.1基本概念 AOP:aspect object programing面向切面编程 aop编程的要点在于关注点和切入点 关注点:指的是代码中的重复部分,每次实现 ...

  10. nodejs新手教程中upload file的问题

    可参见: http://cnodejs.org/topic/50234890f767cc9a51f88481 request.setEncoding("utf8");应注释掉.