JAVA编程思想(2) - 操作符(一)

"在最底层,Java中的数据是通过操作符来操作的。"

1. 使用Java操作符

-操作符接受一个或者多个參数,并生成一个新值,參数的形式与普通的方法调用不用,但效果是同样的。加号和一元的正号(+)、减号和一元的负号(-)、乘号(*)、除号(/)以及赋值号(=)的使用方法与其它编程语言同样。

2. 优先级

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

public class Precedence {
    public static void main(String[] args) {
        int x = 1, y = 2, z = 3;
        int a = x + y - 2/2 + z;
        int b = x + (y - 2)/(2 + z);
        System.out.println("a = " + a + " b = " + b);
    }
}  /* Output
 a = 5 b = 1
 */

这两个语句的差别就在于括号的应用。

-注意,System.out.println()语句中包括“+”操作符,“+”起到了字符串的连接,在必要的时候还会运行“字符串转换”,就会尝试将非String类型转换为String。

3.
赋值

-注意,常数无法作为左值。

-对基本数据类型的赋值非常easy的。基本类型存储了实际的数值,而并不是指向一个对象的引用,所以在赋值的时候,是直接将一个地方的内容拷贝到还有一个地方。对于a=b,改动b后并不会影响到a,这正是我们大多数情况下所期望的。

可是在对对象“赋值”的时候,情况却发生了变化,对一个对象进行操作时,我们真正操作的是对对象的引用。所以倘若“将一个对象赋值给还有一个对象“的时候,实际上是将“引用”从一个地方拷贝到还有一个地方。这意味着假若对对象使用c=d,那么c和d都指向原本d指向的那个对象。

class Tank {
    int level;
}

public class Assignment {
    public static void main(String[] args) {
        Tank t1 = new Tank();
        Tank t2 = new Tank();
        t1.level = 9;
        t2.level = 47;
        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 = 27;
        System.out.println("3: t1.level: " + t1.level +
                ", t2.level: " + t2.level);
    }
} /* Output
    1: t1.level: 9, t2.level: 47
    2: t1.level: 47, t2.level: 47
    3: t1.level: 27, t2.level: 27
*/

这个样例非常明显的展示了刚刚说的,在这里t1和t2不再是互相独立的。这是因为t1和t2包括了同样的引用,它们指向同样的对象。(原本t1包括的对对象的引用,是指向一个值为9的对象。在t1赋值的时候,这个引用被覆盖了,也就是丢失了;而那个不再被引用的对象会由“垃圾回收器”自己主动清理)。

-------------------------------------------------------------------------------------------------------------------------

-方法调用中的别名问题:将一个对象传递给方法时,也会产生别名问题。

class Letter {
    char c;
}

public class PassObject {
    static void f(Letter y) {
        y.c = 'z';
    }

    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);
    }
} /*
    1: x.c: a
    2: x.c: z
*/

方法f()似乎要在它的作用域内复制其參数Letter y 的一个副本。可是实际上我们传递的是一个引用,所以f()实际改变的是作用域之外的对象。

4.
算术操作符、自己主动递增和递减、关系操作符、逻辑操作符

-算术操作符、自己主动递增和递减:Java的基本操作符和递增、递减与其它大多数的程序设计语言是同样的。

-关系操作符:关系操作符生成的是一个boolean(布尔)值,布尔值仅仅有true或false。

-逻辑操作符:与C++和C不同的是:不能够将一个非布尔值当作布尔值在逻辑表达式中使用; ”短路“与C和C++没有出入。

时间: 2024-10-12 14:58:26

JAVA编程思想(2) - 操作符(一)的相关文章

JAVA编程思想(2) - 操作符(二)

5. 直接常量 -一般来说,如果程序里使用了"直接常量",编译器可以准确的知道要生成什么样的类型,但有时候却是模棱两可的.这时候需要我们对编译器进行适当的"指导" -直接常量后面的后缀字符标示了它的类型. -指数记数法:e代表"10的幂次" -注意如果编译器能够正确的识别类型,就不必在数值后附加字符,例如语句: float f4 = 200; 不存在含糊不清的地方,所以200后面不需要加L,但是对于:float f4 = 1e-43f; 编译器通

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

3.1  更简单的打印语句 学习编程语言的通许遇到的第一个程序无非打印"Hello, world"了,然而在Java中要写成 System.out.println("Hello, world"); 我们都会感觉太冗长了,能不能简单一些呢?静态导入可以省略掉System,就像这样 import static java.lang.System.*; public class Hello { public static void main(String[] args) {

《Java编程思想(第4版)》pdf

下载地址:网盘下载 内容简介 编辑 本书赢得了全球程序员的广泛赞誉,即使是最晦涩的概念,在Bruce Eckel的文字亲和力和小而直接的编程示例面前也会化解于无形.从Java的基础语法到最高级特性(深入的面向对象概念.多线程.自动项目构建.单元测试和调试等),本书都能逐步指导你轻松掌握.[1] 从本书获得的各项大奖以及来自世界各地的读者评论中,不难看出这是一本经典之作.本书的作者拥有多年教学经验,对C.C++以及Java语言都有独到.深入的见解,以通俗易懂及小而直接的示例解释了一个个晦涩抽象的概

Java编程思想总结笔记Chapter 2

本章介绍Java程序的基本组成部分,体会到Java中几乎一切都是对象. 第二章   一切都是对象 目录: 2.1 用引用操纵对象 2.2 必须由你创建所有对象 2.3 永远不需要销毁对象 2.4 创建新的数据类型:类 2.5 方法.参数和返回值 2.6 构建一个Java程序 2.7 你的第一个Java程序 2.8 注释和嵌入式文档 2.9 编码风格 2.1 用引用操纵对象 一切都看作对象,操纵的标识符实际上是对象的一个"引用",遥控器(引用)操纵电视机(对象),想调控电视,只需通过遥控

java编程思想第1、2、3章细节总结

转眼已经大二学期的暑假,已经使用java有一年了,才开始看thinking in java 这本经典书籍,算是做个系统总结吧,只列一些目前还掌握不熟的需要谨记的知识点. 第一章:对象导论 1.java中的权限:public,protected,private,default. public:可以被任何对象访问. protected:只能在本类和本类的内部类中使用,通过继承操作可以继承下去. private:只能在本类和本类的内部类中使用. default:如果没有加任何权限,则默认就是这个def

Java编程思想重点笔记(Java开发必看)

Java编程思想,Java学习必读经典,不管是初学者还是大牛都值得一读,这里总结书中的重点知识,这些知识不仅经常出现在各大知名公司的笔试面 试过程中,而且在大型项目开发中也是常用的知识,既有简单的概念理解题(比如is-a关系和has-a关系的区别),也有深入的涉及RTTI和JVM底层 反编译知识. 1. Java中的多态性理解(注意与C++区分) Java中除了static方法和final方法(private方法本质上属于final方法,因为不能被子类访问)之外,其它所有的方法都是动态绑定,这意

Java编程思想之字符串

来自:Java编程思想(第四版) 第十三章 字符串 ? 字符串操作是计算机程序中最常见的行为. ? String对象是不可变的.查看JDK文档你就会发现,String类中每一个看起来会修改String值的方法,实际上都是创建了一个全新的String对象,已包含修改后的字符串内容.而最初的String对象则丝毫未动. ? 不可变性会带来一定的效率问题.为String对象重载的"+"操作符就是一个例子.用于String的"+"与"+="是Java中仅

java编程思想-基础

interface: 方法默认为public:成员变量默认 static and final 对象数组的定义:理解? 多接口继承:可以多个接口,但只有一个具体类,具体类在前面 自:多接口继承时,来自不同接口的同名方法怎么处理呢? java重载不能依靠返回类型加以区分(C++可以),也不能依靠checked 异常类型区分 变量定义中的系列定义(逗号隔开):变量名 = 值,其它公共 自:类中,自己引用自己的理解(如,链表节点元素).静态看成动态,编译器的本质实现 内部类和普通类区别:内部类可priv

Java编程思想第四版读书笔记——第十三章 字符串

Java编程思想第四版读书笔记--第十三章 字符串 字符串的操作是计算机程序设计中最常见的行为. 关键词: StringBuilder ,StringBuffer,toString(),format转换,正则表达式, 1.不可变String String对象时不可变的.每当把String对象作为方法的参数时,都会复制一份引用.(其实就是对函数中参数列表中参数的操作不会影响外面的原参数) 如下: import static net.mindview.util.Print.*; public cla