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. 初学coreData数据库读取不成功的问题

    写了一个从数据库读取数据显示列表的代码,结果却无法运行,提示找不到对应的entity,也就是数据库中的某一个表 我查遍了代码也没有发现什么逻辑错误,在appDelegate也初始化了相关数据库,在界面 ...

  2. 9.14noip模拟试题

    中文题目名称 祖孙询问 比赛 数字 英文题目名称 tree mat num 可执行文件名 tree mat num 输入文件名 tree.in mat.in num.in 输出文件名 tree.out ...

  3. COGS 445. [HAOI2010]最长公共子序列

    #include<iostream> #include<cstdio> #include<cstring> #define mod 100000000 #defin ...

  4. [转载]使用兼容ie6 ie7 ie8 FF的text-overflow:ellips

    使用兼容ie6 ie7 ie8 FF的text-overflow:ellipsis超出文本显示省略号来代替截取函数更有利于seo,如果使用截取函数,源代码中的标题是显示不完整的,即便是在title属性 ...

  5. 多核CPU利用测试

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

  6. 你好,C++(40)7.1 一切指针都是纸老虎:彻底理解指针

    第7章 C++世界的奇人异事 在武侠小说中,初入武林的毛头小子总是要遇到几位奇人,发生几件异事,经过高人的指点,经历一番磨炼,方能武功精进,从新手成长为高手.在C++世界,同样有诸多的奇人异事.在C+ ...

  7. POJ 2230 (欧拉路)

    分析: 基础的欧拉路算法,变化在于要求每条边正向和反向各走一遍. 链式前向星构图,只要标记走过的单向边,边找边输出即可. code #include <iostream> #include ...

  8. Cloneable接口分析

    Cloneable接口是一个标记接口,也就是没有任何内容,定义如下: package java.lang; pubilc interface Cloneable { } 这里分析一下这个接口的用法 c ...

  9. gearmand的安装

    1.安装gperf libuuid-devel yum install -y gperf libuuid-devel 2.安装 libevent yum install libevent libeve ...

  10. 使用grunt压缩css是能否设置background-size不压缩进去呢?否则ie8不能识别

    .index-bg{ background:url(img/index-bg-t.5344b19d.jpg) center center/cover no-repeat } 比如上面这样ie8不能识别 ...