Java 运算符 动力节点Java学院整理

Java的运算符,分为四类:
算数运算符、关系运算符、逻辑运算符、位运算符。
算数运算符(9):+ - * / % ++ --
关系运算符(6):== != > >= < <=
逻辑运算符(6):&& || ! ^ & |
位运算符(7):& | ~ ^ >> << >>>

Java基本数据类型:

数值类型:
整型:byte、short、int、long
非整型:double、float
非数值类型:char[字符]、boolean[布尔]
一:算数运算符:
注:算数运算符操作数必须是数值类型。
分为一元运算符和二元运算符;
一元运算符,只有一个操作数;
二元运算符有两个操作数,运算符在两个操作数之间。
一元运算符:正‘+',负‘-',自加‘++',自减‘--‘这四个。
①”++“和”--“运算符,只允许用于数值类型的变量,不允许用于表达式中;
"++"和”--“可以用于数值变量之前或者之后;
两处使用差别:
”++“和”--“用于数值变量之前,在赋值操作中,先对被”++“或”--“操作变量值先加1或者先减1,然后在进行其他的操作;
"++"和”--“用于数值变量之后,在赋值操作中,先用被”++“或”--“的操作变量值进行其他的操作,然后在对其值加1或者减1。

package com.numerical; 

 public class Operator {
   public static void main(String[] args) {
     int a = 5;
     int b,c,d,f,g,h;
     b = +a; //正值
     System.out.println("b="+b+",a="+a);
     c = -a; //负值
     System.out.println("c="+c+",a="+a);
     int l = 2;
     d = ++l; //先l=l+1;再d=l
     System.out.println("d="+d+",l="+l);
     int m = 3;
     f = m++;//先f=m;再m=m+1
     System.out.println("f="+f+",m="+m);
     int n = 4;
     g = --n;//先n=n-1;再g=n
     System.out.println("g="+g+",n="+n);
     int o = 6;
     h = o--;//先h=o;再o=o-1
     System.out.println("h="+h+",o="+o);
   }
 } 

上代码,输出结果为:

b=5,a=5
c=-5,a=5
d=3,l=3
f=3,m=4
g=3,n=3
h=6,o=5

注:一元运算符和前后的操作数之间有空格,可能在有些编译器下编译时会出错。
②二元运算符,加'+',减'-',乘'*',除'/',求余'%'。
在算数运算符中,”+“,”-“,”*“,”/“完成加减乘除四则运算,%是求两个操作数相除后的余数。
运算规则和数学运算基本相同,在算数运算中,计算时按照从左向右的顺序计算,乘除和求余优先于加减,不同的是,程序中的乘运算符不可省略,在数学中可写为”y=2x“而程序中必须写为”y=2*x“。
当二元运算的两个操作数的数据类型不同时,运算结果的数据类型和参与运算的操作数的数据类型中精度较高(或位数较长)一致。

 int a = 3;
 double b = 3.53;//或者3.53d
 float c = 1.7f;
 int d = 1;
 System.out.println("int /int :a/d="+a/d);
 System.out.println("double/int:b/a="+b/a);
 System.out.println("float/int:c/a="+c/a); 

输出结果为:

int /int :a/d=3
double/int:b/a=1.1766666666666665
float/int:c/a=0.56666666

转换原则:

从低精度向高精度转换byte 、short、int、long、float、double
        低精度到高精度会自动转换,而高精度到低精度则要类型强制转换。

 int a = 7;
 double b = 5.33;
 b = a;
 a = (int) b; 

计算机的数据长度:
位:一个二进制数据0或1,是1bit(位);
字节:存储空间的计量单位,是1byte = 8bit;如数据库的VARCHAR为字节;   
1. boolean 类型变量的取值有:ture、false,1字节(8位) 
2. char数据类型有:unicode字符,16位 
3. byte:一个字节(8位)(-128~127)(-2的7次方到2的7次方-1) 
4. short:两个字节(16位)(-32768~32767)(-2的15次方到2的15次方-1) 
5. int:四个字节(32位)(一个字长)(-2147483648~2147483647)(-2的31次方到2的31次方-1) 
6. long:八个字节(64位)(-9223372036854774808~9223372036854774807)(-2的63次方到2的63次方-1) 
7. float:四个字节(32位)(3.402823e+38 ~ 1.401298e-45)(e+38是乘以10的38次方,e-45是乘以10的负45次方) 
8. double:八个字节(64位)(1.797693e+308~ 4.9000000e-324) 
对应java的基本数据类类型:Integer、Float、Boolean、Character、Double、Short、Byte、Long
注意:
①数值计算中语法现象——“晋升”,即:byte、short和char(低于int的数据类型)进行算术运算后,结果会自动提升成int类型;
②两个char型运算时,自动转换为int型;当char与别的类型运算时,也会先自动转换为int型的,再做其它类型的自动转换;
③算数运算可以加入小括号"()"提高优先级,优先小括号内运算,再其他运算符运算;
④算数运算前操作数变量必须赋值,反之,报语法错误。
 
二:关系运算符:
关系运算符用于比较两个数值之间的大小,其运算结果为一个逻辑类型(boolean布尔类型)的数值。
等于'==',不等于'!=',大于'>',大于等于'>=',小于'<',小于等于'<='
以下代码为:

 System.out.println("9.5<8 :"+(9.5<8));
 System.out.println("8.5<=8.5:"+(8.5<=8.5));
 System.out.println("a~z:"+((int)'a')+"~"+((int)'z'));
 System.out.println("A~Z:"+((int)'A')+"~"+((int)'Z'));
 System.out.println("'A' < 'a':"+('A' < 'a'));//字符'A'的Unicode编码值小于字符'a' 

输出结果为:
9.5<8 :false
8.5<=8.5:true
a~z:97~122
A~Z:65~90
'A' < 'a':true

注: boolean类型只能比较相等和不相等,不能比较大小;
     >=的意思是大于或等于,两者成立一个即可,结果为true,<=亦如此;
     判断相等的符号是两个等号,而不是一个等号,这个需要特别小心。
     实际代码中,数值、变量以及运算结果都可以直接参与比较,只是程序中为了增强可读性,有些时候需要将比较分开进行书写。
     比较运算符是程序设计中实现数据比较的基础,也是很多逻辑实现的基础,在程序逻辑中,经常通过比较一定的条件,来判断后续的程序该如何执行。
 
三:逻辑运算符:

逻辑运算符要求操作数的数据类型为逻辑型,其运算结果也是逻辑型值。
逻辑运算的数据和逻辑运算符的运算结果是boolean类型。
 逻辑与'&&',逻辑或'||',逻辑非'!',逻辑异或'^',逻辑与'&',逻辑或'|'
逻辑运算符的真值表:

A和B是逻辑运算的两个逻辑变量;
两种逻辑与(&&和&)的运算规则基本相同,两种逻辑或(||和|)的运算规则也基本相同。
&和|运算是把逻辑表达式全部计算完,而&&和||运算具有短路计算功能。
对于&来说,如果左侧条件为false,也会计算右侧条件的值,而对于&&来说,如果左侧的条件为false,则不计算右侧的条件,这种现象被称作短路现象。
所谓短路计算,是指系统从左至右进行逻辑表达式的计算,一旦出现计算结果已经确定的情况,则计算过程即被终止。
对于&&运算来说,只要运算符左端的值为false,则因无论运算符右端的值为true或为false,其最终结果都为false。
所以,系统一旦判断出&&运算符左端的值为false,则系统将终止其后的计算过程;
对于 || 运算来说,只要运算符左端的值为true,则因无论运算符右端的值为true或为false,其最终结果都为true。
所以,系统一旦判断出|| 运算符左端的值为true,则系统将终止其后的计算过程。
注:异或相同为false,相反则为true。
利用短路现象:
在程序设计时使用&&和||运算符,不建议使用&和|运算符。

四、位运算符:

位运算是以二进制位为单位进行的运算,其操作数和运算结果都是整型值。
位与'&',位或'|',位非'~',位异或'^',右移'>>',左移'<<',0填充的右移'>>>'
位运算的位与'&',位或'|',位非'~',位异或'^'与逻辑运算的相应操作的真值表完全相同,其差别只是位运算操作的操作数和运算结果都是二进制整数,而逻辑运算相应操作的操作数和运算结果都是逻辑值boolean型。

下边为位&运算:

int a = 15;    //x等于二进制数的00001111
    int b = 6;     //y等于二进制数的00000110
    int c = x&y    //z等于二进制数的00000110

结果为:二进制数的00000110
右移是将一个二进制数按指定移动的位数向右移位,移掉的被丢弃,左边移进的部分或者补0(当该数为正时),或者补1(当该数为负时)。这是因为整数在机器内部采用补码表示法,正数的符号位为0,负数的符号位为1。
     将一个数左移"<<"会使该值乘以2的幂。
   将一个数右移>>"会使该值除以2的幂。
   右移(补零)运算符,即无符号右移,">>>"永远不会产生负号,因为其符号位总是被补零。 不论被移动数是正数还是负数,左边移进的部分一律补0。

 System.out.println(1<<3);
 System.out.println(8>>3); 

输出为:8
       1
    int x = 70;   //x等于二进制数的01000110
    int y = 2;
    int z = x>>y  //z等于二进制数的00010001
    即运算结果为z等于二进制数00010001,即z等于十进制数17。
    int x = -70;  //x等于二进制数的11000110
    int y = 2;
    int z = x>>y  //z等于二进制数的11101110
    即运算结果为z等于二进制数11101110,即z等于十进制数-18。
    右移和左移操作,是整数机器数的补码表示法。

&运算符规定必须信号A和B都被充电,其结果才是充电。(1表示充电,0表示未充电)
|运算符规定只要信号A或B被充电,输出结果就是充电。
^异或(XOR)运算符规定如果信号A或B之一被充电,但是信号A和B不是同时被充电,则结果为充电。
~运算符也称为按位求补,它翻转所有的充电状态值。

五、赋值运算符与其他运算符的简捷使用方式 :

① 赋值运算符可以与二元算术运算符、逻辑运算符和位运算符组合成简捷运算符,从而可以简化一些常用表达式的书写。

在程序开发中,大量使用“一元运算符或移位运算符等”该区别简化代码的书写,这样做,因为这样将增加阅读代码的难度,尽量注释。

② 方括号[]和圆括号()运算符
  方括号[]是数组运算符,方括号[]中的数值是数组的下标,整个表达式就代表数组中该下标所在位置的元素值。
 圆括号()运算符用于改变表达式中运算符的优先级。

 String [] sa = {"a","b","c","d"};
 System.out.println(sa[2]); 

输出为:c
③ 字符串加(+)运算符
当操作数是字符串时,加(+)运算符用来合并两个字符串;当加(+)运算符的一边是字符串,另一边是数值时,机器将自动将数值转换为字符串,并连接为一个字符串。

 String a ="aa";
 int c = 555;
 String b = a+"bbb"+c;
 System.out.println(b); 

输出为:aabbb555
④ 条件运算符(三目运算符)
    <表达式1> ?<表达式2> : <表达式3>
先计算<表达式1>的值,
当<表达式1>的值为true时,则将<表达式2>的值作为整个表达式的值;
当<表达式1>的值为false时,则将<表达式3>的值作为整个表达式的值。

 int a = 55,b = 132,res;
 res = a > b ? a : b;
 System.out.println(res); 

输出为:132
⑤强制类型转换符
强制类型转换符能将一个表达式的类型强制转换为某一指定数据类型

 int a;
 double b = 5.66600;
 a = (int) b;
 System.out.println(a); 

输出为:5
⑥对象运算符instanceof
对象运算符instanceof用来测试一个指定对象是否是指定类(或它的子类)的实例,若是则返回true,否则返回false。

 String s = new String("sa");
 if(s instanceof Object){
   System.out.println("String is object class");
 } 

输出为:String is object class
⑦点运算符
    点运算符"."的功能有两个:一是引用类中成员,二是指示包的层次等级。

 String s = "i am string";
 s = s.substring(5);
 System.out.println(s);
 Map<Integer, String> map = new HashMap<Integer, String>();
 map.put(1, "A");
 map.put(2, "B");
 map.put(3, "C");
 Iterator it = map.entrySet().iterator();
 while(it.hasNext()){
   Map.Entry<Integer, String> me =(Map.Entry<Integer, String>) it.next();
   System.out.println("key="+me.getKey()+",value="+me.getValue());
 } 

输出为:
string
key=1,value=A
key=2,value=B
key=3,value=C

在实际的开发中,可能在一个运算符中出现多个运算符,计算时,就按照优先级级别的高低进行计算,级别高的运算符先运算,级别低的运算符后计算.

运算符优先级表
优先级自上而下,级别由高到低。

本文转自互联网,由动力节点整理发布

时间: 2017-04-02

Java中==运算符与equals方法的区别及intern方法详解

Java中==运算符与equals方法的区别及intern方法详解 1.  ==运算符与equals()方法 2. hashCode()方法的应用 3. intern()方法 /* Come from xixifeng.com Author: 习习风(StellAah) */ public class AboutString2 { public static void main(String[]arsgs) { String myName="xixifeng.com"; String

整理Java编程中常用的基本描述符与运算符

描述符 描述符是你添加到那些定义中来改变他们的意思的关键词.Java 语言有很多描述符,包括以下这些: 可访问描述符 不可访问描述符 应用描述符,你可以在类.方法.变量中加入相应关键字.描述符要先于声明,如下面的例子所示(斜体): public class className { // ... } private boolean myFlag; static final double weeks = 9.5; protected static final int BOXWIDTH = 42; p

简述Java编程之关系操作符

在Java编程过程中,我们常常会遇到比较基本类型或者对象之间的大小关系,下面我们来看看怎么去比较.源码如下: package object; class Value{ int i; } public class E08_StaticTest { public static void main(String[] args) { Integer n1= new Integer(47); Integer n2= new Integer(47); int n3=12; int n4=12; System

Java利用条件运算符的嵌套来完成学习成绩的划分

题目:利用条件运算符的嵌套来完成此题:学习成绩> =90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示. 程序分析:程序分析:(a> b)?a:b这是条件运算符的基本例子. 程序设计: import javax.swing.*; public class ex5 { public static void main(String[] args){ String str=""; str=JOptionPane.showInputDialog("请输

Java 逻辑运算符中&&与&,||与|的区别

在Java的逻辑运算符中,有这么四类:&&(短路与),&,|,||(短路或). &&和&都是表示与,区别是&&只要第一个条件不满足,后面条件就不再判断.而&要对所有的条件都进行判断. 看下面的程序: public static void main(String[] args) { // TODO Auto-generated method stub if((23!=23)&&(100/0==0)){ System.ou

JAVA 运算符归纳总结

以下是对java运算符的归纳总结: 一.算术运算符 注意:不建议在其他表达式的内部使用++.–,这样很容易让人困惑 实例: int x = 1427; x = x / 1000;//运行结果x=1,两int型运算结果仍为int型 // % 又叫取余 补充: System.out.print();//打印后,不换行. System.out.println();//打印后,换行 二.逻辑运算符 总结:(false-假.true-真) 与:一假即假 或:一真即真 异或:不同为真 非:取反 短路与:先计

Java知识点归纳 —给Java新手的一些建议(新手必看)

写这篇文章的目的是想总结一下自己这么多年来使用java的一些心得体会,主要是和一些java基础知识点相关的,所以也希望能分享给刚刚入门的Java程序员和打算入Java开发这个行当的准新手们,希望可以给大家一些经验,能让大家更好学习和使用Java. 这次介绍的主要内容是和J2SE相关的部分,另外,会在以后再介绍些J2EE相关的.和Java中各个框架相关的内容. 经过这么多年的Java开发,以及结合平时面试Java开发者的一些经验,我觉得对于J2SE方面主要就是要掌握以下的一些内容. 1. JVM相

给Java菜鸟的一些建议_关于Java知识点归纳(J2EE and Web 部分)

J2EE(Java2 Enterprise Edition) 刚出现时一般会用于开发企业内部的应用系统,特别是web应用,所以渐渐,有些人就会把J2EE和web模式画上了等号.但是其实 J2EE 里面并不仅仅是web,可以看到很多其中的规范都是通用的,目的是为了高效开发出健壮的服务企业业务模式的应用系统.J2EE中也是可以没有web界面的应用,而现在面向大众用户开发的网站往往也会使用到很多的J2EE的技术,所以J2EE和web开发的概念都是融合在了一起了. 我本人在JAVA开发刚入行的时候,也是

详解java==运算符和equals()方法的区别

Java语言程序中判断两个变量是否相等有两种方式:一是运用==运算符,二是运用equals方法. 1. ==运算符 对于==运算符来说,如果两个变量是基本类型的,并且是数值类型,则只要它们的值相等,就会返回true:然而如果是两个引用类型的变量,则分为两种情况:1)它们指向同一个对象,结果返回true:2)它们指向不同的对象,即使对象内容相同,结果还是返回false:下面程序示范了使用==运算符比较两个变量是否相等的结果: public class Test { public static vo

java运算符实例用法总结

四则运算符 四则运算当中的加号"+"有常见的三种用法: 1.对于数值来,那就是加法. 2.对于字符char类型来说,在计算之前,char会被提升成为int,然后再计算.char类型字符,和int类型数字之间的对照关系比表:ASCII,Unicode 3.对于字符串String(首字母大写,并不是关键字)来,加号代表字符串连操作.任何数据类型和字符串进行连接的时候,结果都会变成字符串 自增运算符:++ 自减运算符:-- 基本含义:让一个变量涨一个数字,或者让一个变量降一个数字1 使用格式

Java知识点归纳总结

1. 基本数据类型 整形: byte      1 个字节 short     2 个字节 int          4个字节 long       8个字节 字符: char     2个字节 浮点数: float       4个字节 double   8个字节 布尔: boolean   1个字节 2.java 7  新增二进制整数 以0b或者0B开头 3.java中字符时16位的Unicode编码方式,格式是'\uXXXX',其中xxxx代表一个十六进制整数 4.java中规定了正无穷大

Java运算符&gt;、&gt;&gt;、&gt;&gt;&gt;三者的区别

>表示大于,如:if(a>b)...结果是boolean类型 >>表示带符号右移,如:int i=15; i>>2的结果是3,移出的部分将被抛弃. 转为二进制的形式可能更好理解,0000 1111(15)右移2位的结果是0000 0011(3),0001 1010(18)右移3位的结果是0000 0011(3). >>>无符号右移: 按二进制形式把所有的数字向右移动对应巍峨位数,低位移出(舍弃),高位的空位补零.对于正数来说和带符号右移相同,对于负数来

深入讲解Java中的流程控制与运算符

Java流程控制 Java流程控制的语法与 C/C++ 类似,也有 if...else.while.do...while.for.switch...case等,这里不再讲述具体语法,仅举例说明. 输出九九乘法表(右上三角): public class Demo { public static void main(String[] args){ int i, j; for(i=1; i<=9; i++){ for(j=1; j<=9; j++){ if(j<i){ //打印八个空格,去掉空