Thinking In Java 第三章 操作符

使用Java操作符

操作符接受一个或多个参数(操作数),并生成一个新值。

除了『=』、『==』、『!=』可以作用于对象以外,几乎所有的操作符只能作用于基本类型。String类型支持『+』和『+=』。

 

优先级

当一个表达式中存在多个操作符时,操作符的优先级就决定了各部分的计算顺序。

 

赋值(=)

赋值操作符『=』:取右边的值复制给左边。左值必须是一个明确的、已命名的变量。右值可以是任何常数、变量和表达式。

对于基本类型:

基本类型存储了实际的数值,而并非指向一个对象的引用,所以在赋值的时候,是直接将一个地方的内容复制到了另一个地方。

对于对象类型:

对一个对象进行操作的时候,我们真正操纵的是对象的引用,实际上是将引用从一个地方复制到另一个地方,例如:

public class Tank {
    int level;
}
Tank t1 = new Tank();
Tank t2 = new Tank();
t1.level = 1;
t2.level = 2;
System.out.println("1  t1.level:" + t1.level + ",t2.level:" + t2.level);
t1 = t2;
System.out.println("2  t1.level:" + t1.level + ",t2.level:" + t2.level);
t1.level = 3;
System.out.println("3  t1.level:" + t1.level + ",t2.level:" + t2.level);

程序运行的结果为:

1  t1.level:1,t2.level:2
2  t1.level:2,t2.level:2
3  t1.level:3,t2.level:3

我们可以看到,由于赋值操作将 t2 给了 t1 ,则使得 t1 和 t2 称为了相同的引用,这就造成了别名现象,因而修改 t1 也就同时修改了 t2;

方法调用的别名问题:

public class Letter {
    char c;
}
public class PassObject {

    public static void main(String[] args){
        Letter x = new Letter();
        x.c = 'a';
        System.out.println("1  x.c:" + x.c);
        f(x);
        System.out.println("2  x.c:" + x.c);
    }    
        
    private static void f(Letter y){
        y.c = 'z';
    }
}

程序运行结果为:

1  x.c:a;
2  x.c:z;

在诸多编程语言中,方法会复制传递参数的副本,但是在Java中由于传递的是一个引用,所以对实际参数造成了改变。

思考:若更改方法f()的实现如下

private static void f(Letter y){
    y = new Letter();
    y.c = 'z';
}

结果又会如何?

1  x.c:a;
2  x.c:a;

我们从引用这一全对象的思想可以看到 Java 相对 C 和 C++ 的编程优势。Java的思想更加简单,同时也统一了代码的风格。

 

算数操作符

+,-,*,/,%,+=,-+,*=,/=,%=;+ 和 - 运算符有单目和双目的区分。

++,-- 注意前缀和后缀的优先级区别。

 

关系运算符

关系操作符生成的是一个 boolean 类型的结果。

>,>=,<,<=,==,!=。

对象的等价性:

关系操作符自然也适用于对象,例如:

Integer n1 = new Integer(1);
Integer n2 = new Integer(1);
System.out.println(n1 == n2);
System.out.println(n1 != n2);

结果如下:

false
true

我们始终要记住,我们操作的永远是对象的引用,而并非实际引用所指的对象,所以显然两个是不同的引用,结果也可想而知。

那么我们如何判断两个对象是否相等呢?

基类Object提供了equals()方法来判断两个类是否相同,因此我们需要在自己创建的类中覆盖这一方法以实现我们想要的功能。关于覆盖我们会在后续章节讲述。

 

逻辑运算符

&&,||,!均返回一个boolean类型的值。

注意 Java 中的 boolean 类型并不是 int 类型与 C++ 中的概念不同。

 

直接常量

有时候我们需要对编译器生成的数据类型进行一定的引导,例如:

int i1 = 0X2F;  //16进制;
int i2 = 0177;  //8进制;
long n1 = 200L;  //long类型;
float f1 = 1F;  //float类型;
double d1 = 1D;  //double类型;
double expDouble = 1.39E-43;  //指数计数法;

注意指数默认使用double类型处理,如果出现:

float f2 = 1.39E-43;

编译器会报错,正确的方式应是:

float f2 = 1.39E-43F;

 

按位操作符

&,|,~,^,&=,|=,^=,按位操作符用来操作整数基本类型(int,long,short,char,byte)中的单个 bit。

 

移位操作符

<<,<<=:左移,低位补零

>>,>>=:右移,正数高位插0,负数高位插1

>>>,>>>=:无符号右移,高位插0

 

三元操作符

boolean-exp ? value0 : value1

由于是操作符则他会产生一个值,但是也造成了可读性很差的代码。

 

字符串操作符 + 和 +=

注意Java不允许自己重载操作符!

实现了字符串的连接,如果一个表达式以字符串起头,那么后续的操作数都会自动转换为字符串,例如:

int x = 0,y = 1,z = 2;
String s = "r:";
System.out,println(s + x + y + z);
System.out.println(s + (x + y + z));
System.out.println("" + x);

结果如下:

r:012
r:3
0

 

类型转换操作符

()cast。

窄化转换:

面临了信息丢失的危险,所以窄化转换永远是显式的。在Java中窄化永远是对数据的截尾而并不是舍入。

扩展转换:

不会造成信息丢失,所以扩展转换可以是隐式的。

提升:

表达式中出现的最大的数据类型决定了表达式最终结果的数据类型。

 

Java在许多地方精简了,但是这并不代表它比C++容易了。

 

转载于:https://my.oschina.net/firmament/blog/761930

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《Thinking in Java 》第四版是Bruce Eckel所撰写的一本Java编程入门书籍。本书作为一本深度和广度都非常适合初学者的参考书,在Java编程教材中占有重要的地位。本书分为14个部分,从Java的基础语法到高级面向对象编程阐述,再到常用API、异常处理、泛型等各个方面都有详细的介绍和案例说明。整本书同时也以应用为导向,侧重于培养读者在实际开发中思考的能力,提高读者的编程效率和质量。 对于初学者来说,本书可以帮助读者理解Java编程语言的基础理论,掌握基本的编程知识和技能,对Java编程语言的特点和优势有更深入的认识。本书还提供了许多实例和练习题,使学习者能够更快地掌握Java编程语言,并对其进行应用。而对于熟悉Java的开发者来说,本书也是一本优秀的参考书。无论是源码、设计模式、Java高级特性等方面的知识,本书都有详细的说明和示例代码。此外,本书还为读者提供了Java世界中最新的技术和最佳实践。总之,《Thinking in Java》第四版是一本非常适合Java编程学习和实践的入门书籍,值得一读。 ### 回答2: Thinking in Java第四版英文是一本非常优秀的编程指南,它以Java语言为主题,全面介绍了Java编程语言的各种特性和用法,是Java编程的必备工具书。本书从Java编程的基础知识、对象和类、继承和多态、接口和内部类、异常、泛型和集合、输入和输出、注解、反射和代理、高级主题和Java8新功能等方面逐一讲解,每个知识点都循序渐进,全面深入,让读者能够真正掌握Java编程的精髓。 本书的特点在于对Java编程思想的阐述和深化。它在讲解Java语法的同时,为读者演示了如何通过面向对象的设计思想来编写Java程序。每个章节都伴随有丰富的示例代码,并且有详尽的解释和注释,每一处都可以清晰易懂地讲解相应的知识点和技巧。这样的设计结构,可以大幅提高读者的学习效率,让读者在学习的同时,也可以获得Java编程的实战经验。 总之,Thinking in Java第四版英文是一本非常经典且值得阅读的Java编程教材,适合各种水平的读者使用,尤其适合想深入学习Java编程的人使用。其中涉及的知识点十分广泛,既有基础知识,也有高深技术,且内容详实丰富、易于理解,该书是Java编程领域几乎每个开发人员都应该把它当作必读的工具书之一。 ### 回答3: 《Thinking in Java第四版英文》是一本非常优秀的Java编程技术书籍。本书详细讲解了Java语言的各类知识,从基础语法到高级技巧、开发过程等等。同时,该书还配有大量的例子和实战练习,让读者能够更加深入地理解和掌握所学的知识。 通过阅读《Thinking in Java第四版英文》,读者可以了解到Java的基本数据类型、控制语句、继承和多态等核心概念。同时,该书还深入讲解了Java的面向对象编程、异常处理、集合框架、IO、多线程、网络编程等各个方面,涵盖了Java编程的方方面面。 本书不仅具有广泛的知识面,还具有很强的实用性。在学完每个章节后,作者都提供了大量的实例代码和实践练习,让读者能够更好地理解并应用所学的知识。 总之,《Thinking in Java第四版英文》是一本非常优秀的Java编程技术书籍,是Java程序员必备的参考书籍。读者可以通过该书学到Java语言的核心知识,也能够获得实践经验和提高自己编程技能的机会。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值