`
tangqs
  • 浏览: 18569 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

第二章 Java基础语法(8)

阅读更多

 2.6.7   位运算符

 

Java中共包含四个位运算符:~(取反),&(与),|(或)和 ^(异或)。我们应该还记得,&| ^在逻辑运算符中也扮演了角色的。在这他们也拥有和逻辑运算符中相同的名字,实际上,位运算符和逻辑运算符的运算规则从本质上是完全相同的。下面列出了位运算符的运算规则。

 

&

0

1

 

|

0

1

0

0

0

0

0

1

1

0

1

1

1

1

 

^

0

1

 

0

1

0

0

1

 

1

1

1

1

0

 

 

不过了解这些运算规则仅仅是了解位运算的开始,我们还需要了解更多的内容,比如二进制与十进制之间的转换,原码、反码、补码的表示等等。在本书中,我们把重点放在Java的介绍上,因此我们就不对这些内容做详细介绍,如果需要学习这些内容的话,可以参考一下其他的书籍。

 

最后,给出几个相关例子,大家可以熟悉一下位运算符的用法。

 

public class BitOpTester { 

  public static void main(String[] args) {

    int i1 = -14;

    int i2 = 15;

    int j = ~i1;

    int k = i1 & i2;

    int m = i1 | i2;

    int n = i1 ^ i2;

    System.out.println(j + ", " + k + ", " + m + ", " + n); //结果为:13, 2, -1, -3

  }

}

 2.6.8    三元运算符

 

这个运算符的名字非常难取,按照C语言的中文译名,我在这里也给用了“三元运算符”这个名字,但从运算符的特征来讲,取名“if-else运算符更为恰当一些”。这个运算符的语法如下:

 

布尔表达式?值1:值2

 

意思是:如果表达式的结果为true,则返回值1,否则返回值2。看看下面这几个例子:

 

int i = 20;

int j = 15;

int max = (i>j) ? i:j ;

 

上面代码实际需要做的是将ij之间那个比较大的赋值给max。由于条件i>jtrue,因此返回i的值,因此max最终等于20

 

三元运算符属于常使用的那一类运算符,对于一个有经验的程序员来说,使用三元运算符替代简单的if……else语句可以使语句变得更为简单一些(当然,在新手面前,这样会显得比较酷一些)。不过,使用三元运算符也需要谨慎,有时候过度的使用也会造成降低代码的可维护性。看看下面这个:

 

int min = (x<y)?(x<z)?x:z:(y<z)?y:z;

 

有没有被上面这个搞糊涂?这个表达式用于求xyz之间最小的那个数。而实际上,这还不算是一个非常复杂的表达式。如果再写复杂,那么三元表达式就丧失了它的简单特性了。

 2.6.9    与“=”号联合使用

 

在程序中,我们经常会使用下面的表达式:

 

i = i + 10;

j = j - 5;

 

当碰到这些语句时,我们可以使用运算符和“=”的联合运算符来优化我们的代码,在Java中常见有如下联合赋值运算符:+=-=*=/=%=&=|=<<=>>=>>>=等。以+=为例,i += 5 等价于 i=i+5。而上面的代码也可以利用联合运算符转变为如下代码段:

 

i += 10;

j -= 5;

 

可能有读者会问,除了看上去更简单一些,联合运算符还有什么优势呢?由于Java虚拟机针对联合运算符的操作与普通的赋值运算符有区别,而联合运算符的速度更快,因此从性能上考虑的话,也更建议使用联合运算符。

 2.6.10 +”另一个作用:字符串连接

 

在前文已经介绍“+”是加法运算符,可以对两个数值型数据进行加法运算。实际上,除了这个作用之外,“+”还能作为字符串的连接运算符。例如下面的例子:

 

String str = “hello,” + “world”;

 

在上面的代码中“+”运算符将字符串”hello,””world”连接在一起组成新字符串”hello,world”。有些人可能会问,既然字符串不是基本数据类型,那为什么要使用“+”运算符进行字符串连接的操作呢?其实原因我们在前文中就提到过:因为字符串使用非常频繁,而字符串的连接又是字符串中最为常见的操作,因此有必要使用一些方式简化字符串的连接。

 

不过,“+”号可不仅仅只能用在字符串的连接上,它还能处理非字符串数据和字符串的连接。由于字符串的高使用率与通用性,因此在Java中有这样一个规定:只要“+”某一端是一个字符串,那么另一端的数据将会转换成字符串,然后再和这个字符串连接。也就是说:字符串达到“见谁灭谁”的境界了。让我们通过上面的几个例子来感受一下字符串类型的强大:

 

public class StrUnionTester {

  public static void main(String[] args) {

    String str = null;   

    str = "hello" + 1.0; // 结果为:hello1.0

    System.out.println(str);

    str = "hello" + true; //结果为:hellotrue

    System.out.println(str);

    str = "hello" + 1 + 2 + 3;  //结果为:hello123

    System.out.println(str);

    str = 1 + 2 + 3 + “hello”;  //结果为:6hello

    System.out.println(str);

  }

}

 

可能有人为str=1+2+3+hello;的结果感到迷惑——结果为什么不是123hello?这里的奥秘在于“+”号:要注意,当+两边都是数值类型的时候,它就是一个简单的加法运算符,因此我们要先进行1+2+3的运算,然后再和字符串“hello”进行连接。

 

分享到:
评论

相关推荐

    第二章java基础语法.docx

    第二章java基础语法.docx 第二章java基础语法.docx第二章java基础语法.docx 第二章java基础语法.docx

    Java语言程序设计:第二章 Java语言语法基础.ppt

    Java语言程序设计:第二章 Java语言语法基础.ppt

    计算机后端-Java-Java核心基础-第06章 Java基本语法4 16. 质数输出的实现方式二.avi

    计算机后端-Java-Java核心基础-第06章 Java基本语法4 16. 质数输出的实现方式二.avi

    计算机后端-Java-Java核心基础-第06章 Java基本语法4 22. 项目二登记收入功能的实现.avi

    计算机后端-Java-Java核心基础-第06章 Java基本语法4 22. 项目二登记收入功能的实现.avi

    java基础语法.doc

    想要入门java童鞋的可以看这篇文档,可以快速的入门java

    Java 基础学习PPt---适合准备学习Java的初学者

    第一章 Java 概述 第二章 Java 基础语法【上】 第三章 java 基础语法【下】 第四章 面向对象 【上】 第五章 面向对象 【下】

    Java课件最全

    Java基础教程,最全版本 第1章 Java环境及配置 第2章 Java基本语法 第3章 类和接口 第4章 Java Applet 第5章 Java图形处理 第6章 Java用户界面技术 第7章 异常、事件和多线程机制 第8章 输入输出技术 第9章 ...

    零基础学Java Web开发

     第2章 Java基础语法  第3章 Java面向对象编程  第二篇 JSP基本知识  第4章 JSP基本语法  第5章 JSP内置对象  第6章 JSP与JavaBean  第7章 JSP与JDBC  第8章 Servlet编程  第9章 Servlet编程  第...

    java基础教学-java初级资料.zip

    第二章 java 语言语法1 第三章 java 语言语法2 第四章 java 数组 第五章 面向对象1 第六章 面向对象2 第七章 面向对象3 第八章 java常用类库1 第九章 java常用类库2 第十章 异常处理 第十一章 java集合 第十二章 ...

    java学习课件第二章

    第二章、java语法基础 第三章、面向对象特征 第四章、applet及其应用 第五章、图形用户界面设计 第六章、异常处理 第七章、线程 第八章、集合操作 第九章、文件输入输出 第十章、网络编程

    java自学教程

    第2章 Java基本语法 第3章 类和接口 第4章 Java Applet 第5章 Java图形处理 第6章 Java用户界面技术 第7章 异常、事件和多线程机制 第8章 输入输出技术 第9章 Java数据库技术 第10章 Java安全技术 第11章 ...

    JAVA自学教程(史上最全).ppt

    第2章 Java基本语法 第3章 类和接口 第4章 Java Applet 第5章 Java图形处理 第6章 Java用户界面技术 第7章 异常、事件和多线程机制 第8章 输入输出技术 第9章 Java数据库技术 第10章 Java安全技术 第11章 ...

    JAVA语言入门(chm)

    第二章 Java程序开发与运行环境 第三章 Java程序设计基础 第四章 Java应用程序的基本框架 第五章 Java的类 第六章 Java图形用户接口 第七章 多线程 第八章 Java的"异常" 第九章 Java输入输出操作

    java学习课件第三章

    第二章、java语法基础 第三章、面向对象特征 第四章、applet及其应用 第五章、图形用户界面设计 第六章、异常处理 第七章、线程 第八章、集合操作 第九章、文件输入输出 第十章、网络编程

    java基础教程.pdf

    本书共 208 页,带课后作业,分八章: 第一章 Java 入门 第二章 基础语法 第三章 Java 类和对象 第四章 Java 高级类特性 第五章 数组和枚举 第六章 常见类的使用 第七章 抽象类和接口 第八章 异常和断言

    java学习课件 第四章

    第二章、java语法基础 第三章、面向对象特征 第四章、applet及其应用 第五章、图形用户界面设计 第六章、异常处理 第七章、线程 第八章、集合操作 第九章、文件输入输出 第十章、网络编程

    编程实践:Java进阶100例

    第二章:MyEclipse的基本使用; 第三章:Java基础语法; 第四章:数组的应用; 第五章:面向对象的Java编辑; 第六章:接口与内部类; 第七章:集合的应用; 第八章:异常和反射; 第九章:初识AWT和Swing; 第十章...

    《Java EE应用开发基础》第二章课件(PDF版)

    济南大学《Java EE应用开发基础》课程课件(PDF版),第二章JSP应用基础 2.1 Servlet应用 2.2 JSP语法 2.3 JSP内置对象 2.4 JSP综合应用实例

    《Java语言程序设计——基础篇》第二章基本程序设计示例.zip

    中文版分为《Java语言程序设计基础篇》和《Java语言程序设计进阶篇》主要介绍语法结构、面向对象程序设计基础知识到面向对象程序设计、图形用户界面设计、异常处理、二进制I/O和递归等内容。进阶篇主要介绍数据结构...

Global site tag (gtag.js) - Google Analytics