`
xuedong
  • 浏览: 287043 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

操作符笔记-第一天

    博客分类:
  • java
阅读更多

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

Java是建立在C++基础之上的,所以C和C++程序员应该非常熟悉Java的大多数操作符。当然,Java也做了一些改进与简化。

3.2 使用Java操作符

操作符接受一个或者多个参数,并生成一个新值。几乎所有的操作符都只能操作“基本类型”。例外的操作符是“=”,”==”,!=”,这写操作符能操作所有的对象。除此之外,String类支持“+”,”+=”

3.3 优先级

当一个i阿表达式中存在多个操作符时,操作符的优先级就决定了各部分的计算顺序。最简单的规则就是先乘除后加减。程序员经常会忘记某些优先规则,所以应该用括号明确规定计算顺序。

 

Java代码 复制代码 收藏代码
  1. //: Precedence.java   
  2. public class Precedenece {   
  3.     public static void main(String[] args) {   
  4.         int x = 1 , y = 2 , z = 3;   
  5.         int a = x + y - 2 / 2 + z;   
  6.         int b = x + ( y - 2 ) / ( 2 + z );   
  7.         System.out.println("a = "+a+"\tb = "+b);   
  8.     }   
  9. }   
  10. /* Output:  
  11.  * a = 5    b = 1  
  12.  *///:~  
//: Precedence.java
public class Precedenece {
    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+"\tb = "+b);
    }
}
/* Output:
 * a = 5    b = 1
 *///:~
 

 

 

 

3.4 赋值

赋值使用操作符“=”。它的意思是取”右值“把它复制给”左值“

  1. ”右值“可以是任何常数,变量或者表达式。
  2. “左值”必须是一个明确的已命名的变量。

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

但是在为对象“赋值”的时候,情况却发生了变化。“将一个对象赋值给另一个对象”,实际上是将“引用”从一个地方复制到另一个地方。这意味着假若对象使用 c=d 那么c和d都指向原本只有d指向的对象。

Java代码 复制代码 收藏代码
  1. //: Assignment.java   
  2. // Assignment with objects is a bit tricky   
  3.     
  4. class Tank {   
  5.     int level;   
  6. }   
  7.     
  8. public class Assignment {   
  9.     public static void main(String[] args) {   
  10.         Tank t1 = new Tank();   
  11.         Tank t2 = new Tank();   
  12.         t1.level = 9;   
  13.         t2.level = 48;   
  14.         System.out.println("t1.level:"+t1.level+"\tt2.level:"+t2.level);   
  15.         t1 = t2;   
  16.         System.out.println("t1.level:"+t1.level+"\tt2.level:"+t2.level);   
  17.         t1.level = 27;   
  18.         System.out.println("t1.level:"+t1.level+"\tt2.level:"+t2.level);   
  19.     }   
  20. }   
  21. /* Output:  
  22.  * t1.level:9   t2.level:48  
  23.  * t1.level:48  t2.level:48  
  24.  * t1.level:27  t2.level:27  
  25.  *///:~  
//: Assignment.java
// Assignment with objects is a bit tricky
 
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 = 48;
        System.out.println("t1.level:"+t1.level+"\tt2.level:"+t2.level);
        t1 = t2;
        System.out.println("t1.level:"+t1.level+"\tt2.level:"+t2.level);
        t1.level = 27;
        System.out.println("t1.level:"+t1.level+"\tt2.level:"+t2.level);
    }
}
/* Output:
 * t1.level:9   t2.level:48
 * t1.level:48  t2.level:48
 * t1.level:27  t2.level:27
 *///:~
 

这种特殊的现象通常称作“别名现象”,是Java操作对象的一种基本方式。直接操作对象内的域可以保持连个对象彼此独立,但是容易导致混乱。并且,违背了良好的面向对象车徐设计的原则。

3.4.1 方法调用中的别名问题

 

Java代码 复制代码 收藏代码
  1. //: PassObject.java   
  2. // Passing objects to methods may not be what you're used to .   
  3.     
  4. class Letter {   
  5.     char c;   
  6. }   
  7.     
  8. public class PassObject {   
  9.     static void f (Letter y) {   
  10.         y.c = 'z';   
  11.     }   
  12.     public static void main(String[] args) {   
  13.         Letter x = new Letter();   
  14.         x.c = 'a';   
  15.         System.out.println("1.\tx.c: "+x.c);   
  16.         f(x);   
  17.         System.out.println("2.\tx.c: "+x.c);   
  18.     }   
  19. }   
  20. /* Output;  
  21.  * 1.   x.c: a  
  22.  * 2.   x.c: z  
  23.  *///:~  
//: PassObject.java
// Passing objects to methods may not be what you're used to .
 
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.\tx.c: "+x.c);
        f(x);
        System.out.println("2.\tx.c: "+x.c);
    }
}
/* Output;
 * 1.   x.c: a
 * 2.   x.c: z
 *///:~
 

在许多编程语言中,方法参数将复制一份其传入参数的副本;但Java实际上只是传递了一个引用针对对象的操作都是引用

3.5 算术操作符

Java的算术操作符与其他大多数程序设计语言都是相同的。同时其也使用一种来自C和C++的简化符号同时进行运算与赋值操作(x+=4)

一元减号用于转变数据的符号,而一元加号只是为了与一元减号相对应,但是它唯一的作用仅仅是将较小类型的操作数提升为 int。

3.6 自动递增和递减

递增(++)和递减(–)运算是两中相当不错的快捷运算。这连个操作符各有两种使用方式,通常称为“前缀式”和“后缀式”。“前缀式“会先执行运算,再生成值;”后缀式“会先生成值,再执行运算。

Java代码 复制代码 收藏代码
  1. //: AutoInc.java   
  2. // Demostrates the ++ and -- operators.   
  3.     
  4. public class AutoInc {   
  5.     public static void main(String[] args) {   
  6.         int i = 1;   
  7.         System.out.println("i   : "+i);   
  8.         System.out.println("++i : "+(++i));   
  9.         System.out.println("i   : "+i);   
  10.         System.out.println("i++ : "+(i++));   
  11.         System.out.println("i   : "+i);   
  12.         System.out.println("--i : "+(--i));   
  13.         System.out.println("i   : "+i);   
  14.         System.out.println("i-- : "+(i--));   
  15.         System.out.println("i   : "+i);   
  16.     }   
  17. }   
  18. /* Output:  
  19.  * i   :1  
  20.  * ++i :2  
  21.  * i   :2  
  22.  * i++ :2  
  23.  * i   :3  
  24.  * --i :2  
  25.  * i   :2  
  26.  * i-- :2  
  27.  * i   :1  
  28.  *///:~  
//: AutoInc.java
// Demostrates the ++ and -- operators.
 
public class AutoInc {
    public static void main(String[] args) {
        int i = 1;
        System.out.println("i   : "+i);
        System.out.println("++i : "+(++i));
        System.out.println("i   : "+i);
        System.out.println("i++ : "+(i++));
        System.out.println("i   : "+i);
        System.out.println("--i : "+(--i));
        System.out.println("i   : "+i);
        System.out.println("i-- : "+(i--));
        System.out.println("i   : "+i);
    }
}
/* Output:
 * i   :1
 * ++i :2
 * i   :2
 * i++ :2
 * i   :3
 * --i :2
 * i   :2
 * i-- :2
 * i   :1
 *///:~
 
本文首发自:操作符笔记-第一天-蜘蛛网间

 

分享到:
评论

相关推荐

    c#学习笔记.txt

    )专为.NET设计的一门语言,号称“C/C++家族中第一种面向组件的语言”。很多人觉得它应该像C或者C++,但事实上它更像是java的一个clone,所以作为入门,读一下清华大学出版社出版的《Java 语言与面向对象程序设计》...

    2009 达内Unix学习笔记

    其中 第一个是文件类型(-表普通文件,d表目录,l表软链接文件) 第2~4个是属主,生成文件时登录的人,权限最高,用u表示 第5~7个是属组,系统管理员分配的同组的一个或几个人,用g表示 第8~10个是其他人,除属组...

    2009达内SQL学习笔记

    使用IN操作符的优点: 在长的选项清单时,语法直观; 计算的次序容易管理; 比 OR 操作符清单执行更快;最大优点是可以包含其他 SELECT 语句,使用能够动态地建立 WHERE 子句。 如 SELECT prod_id,prod_price,prod...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    第一章 Oracle入门 一、 数据库概述 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今五十年前。简单来说是本身可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据...

    javascript入门笔记

    Javascript,简称为 JS,是一款能够运行在 JS解释器/引擎 中的脚本语言 JS解释器/引擎 是JS的运行环境: 1、独立安装的JS解释器 - NodeJS 2、嵌入在浏览器中的JS解释器 JS的发展史: 1、1992年 Nombas 开发...

    Delphi编写的虚拟硬盘文件浏览程序.rar

    大小512字节,记得前几天看过<>--一本不错的书,它那上面的第一个程序便是写了一个引导程序.它便是写了程序所需要的功能后将其它地方填0以达到512字节.当然最后两个字节一定是"55 AA",只有这个值才是有效的.  但是,...

    999u盘维护系统2011最新版.rar

    操作方便:傻瓜式操作,只用选择你的U盘盘符便可一键制作成功。2.安全可靠:本工具制作的启动U盘可以随意格式化而不影响,病毒更是无从立足。3.高兼容性:采用本工具制作的启动盘可以兼容市面上绝大多数台式机、...

    自己动手写操作系统(含源代码).part2

    所谓填补空白,具体说就是让像我一样的操作系统爱好者在读完本书之后,能够有信心去读其他比较流行的开源的操作系统代码,有能力从零开始自己动手写操作系统,而这个任务第一版已经完成了。 那么为什么我又写作了第...

    自己动手写操作系统(含源代码).part1

    所谓填补空白,具体说就是让像我一样的操作系统爱好者在读完本书之后,能够有信心去读其他比较流行的开源的操作系统代码,有能力从零开始自己动手写操作系统,而这个任务第一版已经完成了。 那么为什么我又写作了第...

    SSI2018:2018 UT Summer Statistics Institute的Python数据科学概论课程的材料和代码

    课程概述/链接最迟在第二天的课程前一天晚上添加不活动的链接。设置为了最大程度地利用课程,您可能需要使用设置了科学的Python环境的笔记本电脑来上课。 最简单的方法是安装适用于所有主要操作系统的。 您可以从...

    win7电脑变wifi热点

    一、以操作系统为win7的笔记本或装有无线网卡的win7台式机作为主机。配置步骤如下: 1.以管理员身份运行命令提示符: 用快捷键win+R→输入cmd→回车 2.把WIN7的虚拟WiFi网卡开启: 在命令行窗口键入命令:netsh ...

Global site tag (gtag.js) - Google Analytics