Java作为一种编程语言,适用于进行计算,所以需要有一个运算符支撑起来这些计算。
基本运算符
运算符 | 运算含义 | 运算符目数 |
+ | 正号 | 单目运算符 |
- | 负号 | 单目运算符 |
+ | 表示两个数相加 | 双目运算符 |
- | 表示两个数相减 | 双目运算符 |
* | 表示两个数的相乘 | 双目运算符 |
\ | 表示两个数做除法 | 双目运算符 |
% | 表示两个数做模运算 | 双目运算符 |
++ | 表示一个数字自加 | 单目运算符 |
-- | 表示一个数自减 | 单目运算符 |
上述运算符中,正负号和加减乘这几个运算不需要过多的解释,对于不同数据类型之间运算参考JAVA编程(二)--------JAVA数据类型里边对于不同数据类型之间的运算解释的比较明白
Java除法
对于Java里边的除法来说,需要考虑一个问题就是整数除法,在任何一个编程语言中,整数除法都是一个重要的参数
样例程序
class IntDevision
{
public static void main(String[] args)
{
int a=15;
int b=8;
double c = a/b;
System.out.println(a/b);
System.out.println(a/b*b);
System.out.println(c);
}
}
对于上述程序运行可以得到下述结果
---------- java ----------
1
8
1.0
输出完成 (耗时 0 秒) - 正常终止
分析:
两个整数做除法的时候,会返回整除运算的结果,所以a/b=1,在a/b*b=1*b=b,在后续转换为double类型则变成了1.0这个数据,那么如果想对两个整数做除法,而且想得到浮点数类型的话,那么需要进行以下操作:
class IntDevision
{
public static void main(String[] args)
{
int a=15;
int b=8;
double c = 1.0*a/b;
System.out.println(c);
}
}
得到的运算结果为:
---------- java ----------
1.875
输出完成 (耗时 0 秒) - 正常终止
在运算的过程中,先运算了1.0*a将整体根据自动类型提升转化为了double类型数据,之后double/int也转化为了double类型,所以最后就可以得到double类型的数据。
++和--运算符
++运算符可以分为两种用法一种是放在变量后边如a++,一种是放在变量前边如a++
这两种运算有什么区别呢
运行下述样例程序:
class SelfAdd
{
public static void main(String[] args)
{
int a1 = 10;
int b1 = 10;
b1 = a1++;
System.out.println("a1="+a1+";b1="+b1);
int a2 = 10;
int b2 = 10;
b2 = ++a2;
System.out.println("a2="+a2+";b2="+b2);
}
}
可以得到下述结果
---------- java ----------
a1=11;b1=10
a2=11;b2=11
输出完成 (耗时 0 秒) - 正常终止
a1和a2的结果相同,都是在原来a1,a2的基础上进行了+1操作,这就是自加运算符对于本身的操作,但是如果这个整个运算进行操作。
// b=a++运算步骤
b=a;
a=a+1
// b=++a运算步骤
a=a+1
b=a;
一种得到+1运算之后的结果,另外一个是得到+1运算之前的结果。
但是a++和++a如果单独使用,并没有什么区别,但是如果a的数据类型是short或者type,那么a++和++a与a=a+1就存在了根本上的区别。
class SelfAdd
{
public static void main(String[] args)
{
short a1 = 10;
a1++;
System.out.println("a1="+a1);
short a2 = 10;
a2=a2+1;
System.out.println("a2="+a2);
}
}
对于上述程序进行编译运行:
---------- javac ----------
SelfAdd.java:9: 错误: 不兼容的类型: 从int转换到short可能会有损失
a2=a2+1;
^
1 个错误
输出完成 (耗时 0 秒) - 正常终止
由于常数1在Java中默认为int所以运算的过程中得到的结果是int类型,所以无法进行运算。
但是对于short来说,仍然可以使用++这个运算符
class SelfAdd
{
public static void main(String[] args)
{
short a1 = 10;
a1++;
System.out.println("a1="+a1);
//short a2 = 10;
//a2=a2+1;
//System.out.println("a2="+a2);
}
}
得到运算结果:
---------- java ----------
a1=11
输出完成 (耗时 0 秒) - 正常终止
可以发现自加可以计算
同理可以得到--运算符的使用方法
比较运算符
比较运算符,有如下几种>, <, >=, <=, ==, != instanceof
最后一个将会在后边讲面向对象中再给大家讲解。
运算符 | 意义 |
> | 前边大于后边:true,否则false |
< | 前边小于后边:true,否则false |
>= | 前边大于或等于后边:true,否则false |
<= | 前边小于或等于后边:true,否则false |
== | 前边等于后边:true,否则false |
!= | 前边不等于后边:true,否则false |
样例程序:
class ComparaOperator
{
public static void main(String[] args)
{
int a1 = 10, a2 = 11, a3 = 11, a4 = 13;
System.out.println("a1==a2的运算结果为:"+(a1==a2));
System.out.println("a2>a1的运算结果为:"+(a2>a1));
System.out.println("a2>=a3的运算结果为:"+(a2>=a3));
System.out.println("a2<=a3的运算结果为:"+(a2<=a3));
System.out.println("a3>=a4的运算结果为:"+(a3>=a4));
System.out.println("a4!=a2的运算结果为:"+(a4!=a2));
System.out.println("a1<a2的运算结果为:"+(a1<a2));
System.out.println("a2>a4的运算结果为:"+(a2>a4));
}
}
得到运算结果:
---------- java ----------
a1==a2的运算结果为:false
a2>a1的运算结果为:true
a2>=a3的运算结果为:true
a2<=a3的运算结果为:true
a3>=a4的运算结果为:false
a4!=a2的运算结果为:true
a1<a2的运算结果为:true
a2>a4的运算结果为:false
输出完成 (耗时 0 秒) - 正常终止
最后根据是否满足条件得到布尔值。
逻辑运算符
在Java中逻辑运算符
逻辑运算符 | 运算含义 |
& | 逻辑与 |
&& | 短路与 |
| | 逻辑或 |
|| | 短路或 |
! | 逻辑非 |
^ | 逻辑异或 |
不同逻辑运算的真值表
true | false | |
true | true | false |
false | false | false |
true | false | |
true | true | true |
false | true | false |
true | false |
false | true |
true | false | |
true | false | true |
false | true | false |
主要用于条件判断语句中的一些判断句的一些判定
讨论&和&&的区别:
在与运算的过程中,如果其中一个是false,那么运算结果是false。
如果是false&(运算式),得到false结果,但是运行运算式
如果是false&&(运算式),得到false结果,运算式不运行
class LogicOperator
{
public static void main(String[] args)
{
boolean b1=true,b2=false;
int i1=1,i2=1;
if(b2&(i1++==1))
System.out.println("true");
System.out.println("i1="+i1);
if(b2&&(i2++==1))
System.out.println("true");
System.out.println("i2="+i2);
}
}
得到的运算结果:
---------- java ----------
i1=2
i2=1
输出完成 (耗时 0 秒) - 正常终止
i1运算式中,由于是&逻辑与运算,所以后续的i1++得到运算
i2运算式中,由于是&&短路与运算,所以后续的i2++没有得到运算
同理,对于或运算来说,如果第一个为true那么最终结果即为true
所以true|(运算式),得到结果true而且运算运算式
true||(运算式),得到结果true,但是不运行运算式
位运算符
在Java中存在位运算符的操作,使用的比较少,一般作为加密处理
运算符 | 运算意义 |
>> | 右移(/2) |
<< | 左移(*2) |
>>> | 无符号右移 |
& | 按位与 |
| | 按位或 |
^ | 按位异或 |
~ | 按位非 |
在这个运算中,即将数字转化为二进制,通过位运算,得到计算结果
三目运算符
在Java中有且只有一个三目运算符,使用方法如下:
(布尔表达式)?(表达式1):(表达式2)
如果布尔表达式的值为真,那么运行表达式1,如果布尔表达式的值为假,那么运行表达式2
样例程序
class TernaryOperator
{
public static void main(String[] args)
{
int a=1,b=3;
int c = a>b?a:b;
System.out.println(c);
}
}
得到运算结果:
---------- java ----------
3
输出完成 (耗时 0 秒) - 正常终止
分析:
其中的三目运算符 c = a>b?a:b;运算过程中,先比较a和b的大小,前边设置a=1,b=3,所以a<b,所以运算表达式2,那么返回的数值为b的参数值为3,所以c=3