几乎所有运算符都只能操作“主类型”(Primitives)。例外是“=”、“= =”和“! =”,它们能操作所有对象。除此以外,String类支持“+”和“+=”。
注:所谓“主类型”,即基本类型:boolean、char<16bits>、byte<8bits>、short<16bits>、int<32bits>、long<64bits>、float<32bits>、double<64bits>、void。

一、赋值
主类型使用“A=B”,那么B处的内容就复制到A。若修改A,那么B根本不会受修改的影响。
对象“赋值”的时候情况发生了变化。对一个对象进行操作时,我们真正操作的是它的句柄。所以倘若“从一个对象到另一个对象”赋值,实际就是将句柄从一个地方复制到另一个地方。这意味着假若为对象使用“C=D”,那么C和D最终都会指向最初只有D才指向的那个对象。
short s1 = 1; s1 = s1 + 1; (s1+1运算结果是int型,需要强制转换类型)
short s1 = 1; s1 += 1;(可以正确编译) +=运算符无类型转换问题

二、算术运算符
Java的算术运算符:加号(+)、减号(-)、除号(/)、乘号(*)以及模数(%,从整数除法中获得余数)。整数除法会直接砍掉小数,而不是进位。

三、自动递增、递减
对于前递增和前递减(如++A或--A),会先执行运算,再生成值。
对于后递增和后递减(如A++或A--),会先生成值,再执行运算。

四、关系运算符
关系运算符包括<、>、<=、>=、= =、!=。
等于和不等于适用于所有内建的数据类型,但其他比较不适用于boolean类型。想对比两个对象的实际内容是否相同,必须使用所有对象都适用的特殊方法equals()。equals()方法不适用于“主类型”,那些类型直接使用= =和!=即可。equals()的默认是比较句柄。所以除非在自己的新类中改变了equals(),否则不可能表现出我们希望的行为大多数Java类库都实现了equals(),所以它实际比较的是对象的内容,而非它们的句柄= =和! =比较的是对象句柄,而不是对象的实际内容。

五、逻辑运算符
逻辑运算符&&、||、!能生成一个布尔值。
&和&&都可作为逻辑运算符“与”使用,但是&&是“短路与”,运算时先判断符号前面的表达式的值,如果能够确定整个表达式的值,则不进行符号后面的表达式的运算。另外,&可作为位运算符使用。

六、按位运算符
按位AND运算符(&)
按位OR运算符(|)
按位XOR(^,异或)
按位NOT(~,也叫作“非”运算符)属于一元运算符,生成与输入位的相反的值

七、移位运算符
左移位运算符(<<)能将运算对象向左移动运算符右侧指定的位数(在低位补0)。
有符号右移位运算符(>>)将运算对象向右移动运算符右侧指定的位数。有符号右移位运算符使用了符号扩展:若值为正,则在高位插入0;若值为负,则在高位插入1
无符号右移位运算符(>>>),它使用了“零扩展”:无论正负,都在高位插入0

八、三元IF-ELSE运算符
布尔表达式 ? 值0:值1   “布尔表达式”的结果为true,就计算“值0”,否则计算“值1”

九、字符串运算符+和+=
int x = 0, y = 1, z = 2;
System.out.println(“out:” + x + y + z);
在这里,Java编译程序会将x,y和z转换成它们的字串形式,而不是先把它们加到一起。
运用“String +”时,若表达式以一个String起头,那么后续所有运算对象都会转换到字串。
想通过“加号”连接字串(使用Java的早期版本),请务必保证第一个元素是字串。

十、造型(Cast)运算符
对于“缩小转换”(Narrowing Conversion)的操作(能容纳更多信息的数据类型,将其转换成容量较小的类型,例如int转short),此时就可能面临信息丢失的危险。此时,编译器会强迫我们进行明确造型。
对于“放大转换”(Widening conversion),则不必进行明确造型,因为新类型肯定能容纳原来类型的信息,不会造成任何信息的丢失。
布尔值(bollean)根本不允许进行任何造型处理,其它任何主类型可互相造型。
将float或double值造型成整数值后,总是将小数部分“砍掉”,不作任何进位处理。

Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
Math.round(11.5)==12      Math.round(-11.5)==-11
round方法返回与参数最接近的长整数,参数加1/2后求其floor,故(-11.5)+0.5=11。

十一、Java操作符的优先级和结合性

 优先级  操作符  结合性
 1  [ ] . ( ) (函数呼叫)  从左到右
 2  ! ~ ++ -- +(单操作数) –(单操作数) ( ) (类型转化) new  从右到左
 3  * / % 从左到右
 4  + -  从左到右
 5  <<   >>   >>>  从左到右
 6  <<=  >>= instance of  从左到右
 7  == !=  从左到右
 8  &  从左到右
 9  ^  从左到右
 10  |  从左到右
 11  &&  从左到右
 12  ||  从左到右
 13  ?   :  从右到左
 14  = += -= *= /= %= ^= <<= >>= >>>=  从右到左

Java操作符的更多相关文章

  1. JavaSE复习日记 : Java操作符\关系运算符\逻辑运算符\赋值运算符\字符串连接符\三元运算符

    // Java操作符\关系运算符\逻辑运算符\赋值运算符\字符串连接符\三元运算符 /* * 一 Java操作符 * * Java操作符都有哪些? * +, -, *, /, %, ++, -- * ...

  2. Java操作符真的简单到易如反掌?

    之前我写了一篇<吃人的那些Java名词:对象.引用.堆.栈和堆栈>,本以为凭借自己8年的Java编程经验足够把这些“吃人”的Java名词解释清楚了,但有网友不以为然,在文章底部评论说:“老 ...

  3. [THINKING IN JAVA]操作符

    3 操作符 3.1 static import 可以static import静态方法和变量,这样就可以在不写类名的前提下调用类中的静态方法和变量: package com.chenlei.study ...

  4. Java 操作符

    子系统的特点 instanceof 操作符 Animal类是Dog的直接父类,Creature类和Object类是Dog的间接父类,因此 Dog dog=new Dog(); System.out.p ...

  5. Java操作符,<<、>>等

    数学意义:在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方. 计算:3 << 2 3 << 2,则是将数字3左移2位 1. ...

  6. Java 操作符小记

    "在最底层,Java中的数据是通过使用操作符来操作的" (Thinking in Java) 1 算术操作符 Java 中的基本算术操作符和其他大多数程序设计语言是相同的.其中包括 ...

  7. Java操作符——i++ 和 ++i的区别

    问题:前置自增和后置自增的区别 Code-后置自增 public class Test { public static void main(String[] args) { int a = 2; in ...

  8. 【Stackoverflow好问题】Java += 操作符实质

    问题 直到今天,我都一直以为: i += j 等同于 i = i + j; 但如果有: int i = 5; long j = 8; 这时 i = i + j不能编译.但i += j却能够编译.这说明 ...

  9. [Java编程思想-学习笔记]第3章 操作符

    3.1  更简单的打印语句 学习编程语言的通许遇到的第一个程序无非打印"Hello, world"了,然而在Java中要写成 System.out.println("He ...

随机推荐

  1. v0lt CTF安全工具包

    0×00 v0lt v0lt是一个我尝试重组每一个我使用过的/现在在使用的/将来要用的用python开发的安全领域CTF工具.实践任务可能会采用bash脚本来解决,但我认为Python更具有灵活性,这 ...

  2. 10、技术经理要阅读的书籍 - IT软件人员书籍系列文章

    技术经理是项目组中的重要角色.他需要负责软件项目中的重要部分,如果项目组没有架构师的话,技术经理还需要担负起架构师的职责.同时,技术经理要对项目中的所有重要的技术问题进行处理. 但是,在项目组内部,软 ...

  3. linux下svn命令使用大全(share)

     转自:http://blog.chinaunix.net/uid-22566367-id-1965771.html 1.将文件checkout到本地目录 svn checkout path(path ...

  4. Linux Buffer I/O error on device dm-4, logical block

    Linux服务器日志(Oracle Linux Server release 5.7)里面出现了一些"Buffer I/O error on device dm-4, logical blo ...

  5. Linux high memory 学习总结

    在free命令中有个参数l,它表示 show detailed low and high memory statistics.其实最先是对High Memory总是为零有些不解(Linux是64为). ...

  6. Spring,hibernate,struts的面试笔试题及答案

    Hibernate工作原理及为什么要用?  原理:  1.读取并解析配置文件  2.读取并解析映射信息,创建SessionFactory  3.打开Sesssion  4.创建事务Transation ...

  7. .NET领域驱动设计—实践(穿过迷雾走向光明)

    阅读目录 开篇介绍 1.1示例介绍 (OnlineExamination在线考试系统介绍) 1.2分析.建模 (对真实业务进行分析.模型化) 1.2.1 用例分析 (提取系统的所有功能需求) 1.3系 ...

  8. c# FTP操作类

    using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Net ...

  9. 设计模式C#实现(十一)——组合模式

    意图 0 适用性 1 结构 2 实现 3 效果 4 意图 将对象组合成树形结构以表示“部分-整体”的层次结构.Composite使得用户对单个对象和组合对象的使用具有一致性. 适用性 你想表示对象的部 ...

  10. 使用SQL语句创建SQL数据脚本(应对万网主机部分不支持导出备份数据)

    1.查询待导出表Ad中的数据. SELECT * FROM [DB_Temp].[dbo].[Ad] 2.编写存储过程. --将表数据生成SQL脚本的存储过程 CREATE PROCEDURE dbo ...