"在最底层,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++没有出入。

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

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

    5. 直接常量 -一般来说,假设程序里使用了"直接常量",编译器能够准确的知道要生成什么样的类型.但有时候却是模棱两可的. 这时候须要我们对编译器进行适当的"指导&quo ...

  2. Java编程思想之三 操作符

    在底层,Java中的数据是通过使用操作符来操作的. 3.2 使用Java操作符 操作符接收一个或多个参数,并生成一个新值. 操作符作用于操作数,生成一个新值.有些操作符可能会改变操作数自身的值,这被称 ...

  3. 《java编程思想》操作符

    1. 自动递增和递减 递增和递减运算是两种相当不错的快捷运算,递减操作符是 "--",意为减少一个单位,递增操作符是 "++",意为增加一个单位.这两个操作符各 ...

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

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

  5. 《 Java 编程思想》CH03 操作符

    < Java 编程思想>CH03 操作符 在最底层,Java中的数据是通过操作符来操作的. 操作符 +,-,*,*,=与其他语言类似 几乎所有的操作符只能操作"基本类似" ...

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

    Java编程思想重点笔记(Java开发必看)   Java编程思想,Java学习必读经典,不管是初学者还是大牛都值得一读,这里总结书中的重点知识,这些知识不仅经常出现在各大知名公司的笔试面试过程中,而 ...

  7. java编程思想

    Java编程思想,Java学习必读经典,不管是初学者还是大牛都值得一读,这里总结书中的重点知识,这些知识不仅经常出现在各大知名公司的笔试面试过程中,而且在大型项目开发中也是常用的知识,既有简单的概念理 ...

  8. Java编程思想(11~17)

    [注:此博客旨在从<Java编程思想>这本书的目录结构上来检验自己的Java基础知识,只为笔记之用] 第十一章 持有对象 11.1 泛型和类型安全的容器>eg: List<St ...

  9. Java编程思想 (1~10)

    [注:此博客旨在从<Java编程思想>这本书的目录结构上来检验自己的Java基础知识,只为笔记之用] 第一章 对象导论 1.万物皆对象2.程序就是对象的集合3.每个对象都是由其它对象所构成 ...

随机推荐

  1. 数据挖掘 决策树算法 ID3 通俗演绎

    决策树是对数据进行分类,以此达到预測的目的.该决策树方法先依据训练集数据形成决策树,假设该树不能对全部对象给出正确的分类,那么选择一些例外添�到训练集数据中,反复该过程一直到形成正确的决策集.决策树代 ...

  2. C# openfiledialog设置filter属性后达不到过滤效果的原因之一

    此处用RichTextBox控件举例>>> 在窗体对应的类中处理Load事件可以为openfiledialog设置Filter的属性: private void Form1_Load ...

  3. 事务应用-运行多条SQL语句

    事务具有原子性,要么不运行,要么全运行,一旦成功运行永久保存.而这些正是因为事务的原子性和对数据库的持久性形成的.下面是一个关于统一给数据库中的数据改动的批量操作,利用到事务. TODO:批量改动数据 ...

  4. Doxgen+Graphiz+htmlhelp配置

    查看一些开源码常常被一些函数的调用关系给绕进去.找个工具生成个调用关系图或简单的文档对于帮助阅读程序有非常大的帮助. 1 doxgen+graphviz+htmlhelp简单介绍 1.1 doxgen ...

  5. php获取分类以下的全部子类方法

    获取分类以下的全部子类方法: static function getMenuTree($arrCat, $parent_id = 0, $level = 0,$all=True) { static $ ...

  6. SE 2014年4月16日

    一. 描述BGP路由协议中  BGP路由携带 AS-PATH/ next-hop  / ORIGIN /  local-preference 属性的特点! BGP协议中的AS-PATH是AS列表,用来 ...

  7. 新西兰gap year_百度百科

    新西兰gap year_百度百科 新西兰gap year    Working Holiday Visa,即打工度假签证.它允许旅行者出于补贴旅行费用的目的而在签证颁发国边打工边旅行.用来鼓励双方国家 ...

  8. Android中振动器(Vibrator)的使用

    系统获取Vibrator也是调用Context的getSystemService方法,接下来就可以调用Vibrator的方法控制手机振动了.Vibrator只有三个方法控制手机振动: 1.vibrat ...

  9. 第一章 andrid visdio 安装

    第一章   andrid visdio 安装与环境搭建 一.Android Studio简介 Android Studio是Google新发布的Android应用程序开发环境,Android Stud ...

  10. JavaScript的作用域和变量对象

    变量对象 先来说说什么是变量对象.变量对象中又存储了什么东西吧. JavaScript中的运行环境包含全局运行环境和函数运行环境这两种,每进入到一个运行环境都会创建一个变量对象,这个对象中记录了在当前 ...