第3章 操作符

Java中有关操作符的语法大多与C++中的类似,就不再重复说了,只说下其中特殊的地方。

1. String支持“+”和“+=”操作。在进行“+”操作时,如果一个操作数是字符串,其他操作数自动转为字符串。但要注意运算顺序。例如下面两个输出是不一样的。

System.out.println(“ans”+2+3);

System.out.println(2+3+“ans”);

2. “%”运算符的操作数可以是浮点数,如52.3%10的结果是2.3。

3. 二元运算符的结果的数据类型一般为两个操作数中范围较大的一个。

4. 赋值相容:小范围类型赋给大范围类型会自动转换为大范围的类型。

  赋值不兼容:需要进行强制转换,可能发生精度丢失。

5. 测试对象的等价性

关系操作符==和!=适用于所有的对象,但其意义是对引用的比较,所以只是用不同的引用创建值两个相等的对象,它们的比较也是false的。如下面的代码

Integer n1 = new Integer(47);

Integer n2 = new Integer(47);

System.out.println(n1==n2);

输出结果为false。

那怎么比较两个对象的实际内容是否相同呢?这时必须要调用所有对象都使用的特殊方法equals(),但这个方法是不适用与基本类型的,基本类型直接使用关系操作符即可。

Integer n1 = new Integer(47);

Integer n2 = new Integer(47);

System.out.println(n1.equal(n2));

输出结果为true。

但事情没有那么简单,如果我们用equals比较我们自己创建的类,又会有奇怪的结果:

class Value {

int  i;

}

public class Test {

public static void main(String args[]){

Value a1=new Value();

Value a2=new Value();

a1.i=a2.i=100;

System.out.println(a1.equals(a2));

}

}

输出结果竟然是false。

这是因为equals()默认行为是比较引用,除非在自己创建的类中覆盖equals()方法,否则不能出现我们期望的结果。

6. 贴两个方法

printBinaryInt()和printBinaryLong(),分别接受int或long型的参数,并用二进制格式输出。

7. 窄化转换,存在信息丢失的危险,必须显式的进行转换,扩展转换着没有要求。

8. 将float或double类型转换为整型时,总是对该数字执行截尾,如果希望得到舍入的结果,就需要使用java.lang.Math中的round()方法。

9. Java中没有sizeof:没有用的需求,因为所有数据类型在机器中的大小是相同的。

10. 对char、byte和short中任何一个进行算术运算,都会得到一个int结果,必须显式的类型转换才能转换回原来的类型。

时间: 2024-09-09 02:21:32

第3章 操作符的相关文章

《C语言解惑》一第1章 操作符1.1 基本算术操作符

第1章 操作符 C语言解惑 C语言程序由语句构成,而语句由表达式构成,表达式又由操作符和操作数构成.C语言中的操作符非常丰富--本书的附录B所给出的操作符汇总表就是最好的证据.正是因为这种丰富性,为操作符确定操作数的规则就成为了我们理解C语言表达式的核心和关键.那些规则--即所谓的"优先级"和"关联性"--汇总在本书附录A的操作符优先级表里.请使用该表格来解答本章中的谜题. 谜题1.1 基本算术操作符 请问,下面这个程序的输出是什么? main() { int x;

PHP第一季视频教程(李炎恢+php100 不断更新)

PHP是一种目前最流行的服务端Web程序开发语言之一.PHP主要的特点是语法简单易于学习.功能强大.灵活易用.在融合了现代编程语言的一些最佳特性后,PHP.Apache和MySQL的组合已成为Web服务器的一种配置标准.学习PHP的过程是十分轻松.快捷的.可以说PHP已经成为Web脚本技术的先驱,并且会继续引领Web技术的潮流. 1.[PHP第一季]第1章PHP概述(1) 17:39 / 分 2.[PHP第一季]第1章PHP概述(2) 14:49 / 分 3.[PHP第一季]第1章PHP概述(3

《C语言解惑》一导读

前言 C语言解惑 C语言并不大--如果以参考手册的篇幅作为衡量标准的话,C语言甚至可以归为一种"小"语言.不过,这种"小"并不意味着C语言的功能不够强大,而是说明了C语言里的限制性规则比较少.C语言本身的设计非常简洁精妙,这一点相信C语言的使用者早已有所体会. 不过,C语言的这种精妙对C语言的初学者来说,似乎是故作神秘.因为限制较少,C语言可以写成内容丰富的表达式,这可能会被初学者认为是输出错误.C语言的紧凑性允许以简洁凝炼的方式实现常见的编程任务. 学用C语言的过

Thinking in Java第四版引入包问题

问题描述 在第三章操作符中,作者用print代替了System.out.println.但是必须要引入作者自己写的包,这个包我下载了,也修改了classpath信息,但是在编译时一直提示"错误:程序包net.mindview.util不存在"错误.把包放到源代码目录下可以运行.我把包解压到了E:JavaTIJ4-code目录下,classpat配置:.;D:jdklibtools.jar;D:jdklibdt.jar;E:JavaTIJ4-code;另:path配置:,;%JAVA_H

think in java 中的一个引入包的问题??求解答classPath设置!!

问题描述 就是在第三章操作符时作者写了个简单的输入方法print()代替System.out.println(),不过要引入其自己创建的包.怎么引入那个包的,那个包我下载了.解压后是net.mindview.*,我是把包放在了D:think文件夹下面的,即:D:thinknetmindview.*,我的在环境变量的classpath中添加了对包net的引用可是编译通不过,还是报错找不到软件包net.mindview.util不存在.我的目前classpath变量是:.;C:ProgramFile

Logic Programming With Prolog学习笔记(一)

第一章:Getting start 1.hello world: write("Hello World"),nl,write("Welcome to Prolog"),nl. 以.号做结束,有一系列目标(goal)组成(一般也称为查询query),目标之间用,号隔开,这里的write和nl其实是内建的IO谓词,总共4个目标按顺序执行,nl是开始一个新行,所有目标达成,Prolog系统会输出yes. 2.halt也是BIPs,用于结束Prolog系统,statisti

《Java和Android开发学习指南(第2版)》——第2章,第2.8节操作符

2.8 操作符计算机程序是实现某一功能的操作汇集在一起的一个集合.有很多种类型的操作,包括加法.减法.乘法.除法和位移.在本小节中,我们将学习各种Java操作. 一个操作符会对一个.两个或三个操作数执行操作.操作数是操作的目标,而操作符则是表示动作的一个符号.例如,如下是加法操作: x + 4 在这个例子中,x和4是操作数,+是操作符. 一个操作符可能返回一个结果,也可能不返回结果. 操作符和操作数的任何合法的组合,叫作表达式(expression).例如,x+4是一个表达式.一个布尔表达式会得

《C# to IL》第四章 关键字和操作符(下)

我们创建了一个接口iii,它只有一个名为pqr的函数.然后,类yyy实现了接口iii,但是没有实现函 数pqr,而是添加了一个名为abc的函数.在入口点函数vijay中,函数pqr会被接口iii调用. 我们 之所以没有得到任何错误,是因为override指令的存在.这个指令通知编译器重定向对接口iii的函数pqr 以及对类yyy的函数abc的任何调用.编译器对override指令是非常严格的.可以从这样的事实中对此进行 考量--如果在类yyy的定义中没有实现iii,那么我们就会得到下列异常: O

《C# to IL》第四章 关键字和操作符(上)

位于return语句之后的代码是不会被执行的.在下面给出的第1个程序中,你将发现在C#中有一个 WriteLine函数调用,但是在我们的IL代码中却看不到.这是因为编译器意识到任何return之后的语句都 不会被执行,从而,也就不用将其转换到IL中了. a.cs class zzz { public static void Main() { return; System.Console.WriteLine("hi"); } } a.il .assembly mukhi {} .clas