Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5760623
  • 博文数量: 291
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 7924
  • 用 户 组: 普通用户
  • 注册时间: 2016-07-06 14:28
个人简介

阿里巴巴是个快乐的青年

文章分类

全部博文(291)

文章存档

2018年(21)

2017年(4)

2016年(5)

2015年(17)

2014年(68)

2013年(174)

2012年(2)

分类: Java

2014-01-27 22:09:36

一、使用Java运算符
1、优先级
        Java运算符优先级与C++类似,需要注意的是,最好不要依赖程序本身的优先级规则,而应该用括号明确规定计算顺序,以不必将自己的精力浪费在这些无谓的犄角旮旯。
2、赋值
        赋值是用等号运算符=进行的,即“取得右边的值,把它复制到左边”。右边的值可以是任何值,但左边的值必须是变量,即必须有一个物理性的空间来保存右边的值,比如:string A = "hello world"。
        需要注意的是:Java中类对象的赋值类似于C++中的引用赋值,在Java中叫做别名,但是对类对象的成员赋值则类似于C++中的赋值。举例说明如下:
        class Number {
            int i;
        }
        Number n1 = new Number();
        Number n2 = new Number();
        n1.i = 1;
        n2.i = 2;
        n1 = n2;      //此时n1.i和n2.i都等于2
        n1.i = 3;      //此时n1.i和n2.i都等于3
       n2.i = 4;

        n1.i = n2.i;   //此时n1.i和n2.i都等于4 
       n1.i = 5;      //此时n1.i等于5,n2.i都等于4
        从上面结果可以看出,对于对象赋值即n1 = n2,无论n1还是n2都包含了相同的句柄,它们指向相同的对象(最初的句柄位于n1内部,指向容纳了值1的一个对象,在赋值过程中,那个句柄实际已经丢失可,它的对象会由“垃圾收集器”自动清除)。这种特殊的现象通常叫作“别名”,是Java操作对象的一种基本方式。
        需要注意的是:用对象成员赋值虽然不会将n1和n2绑定到相同的对象,但是会使对象内部的字段处理发生混乱,在Java中不推荐这么做。
        此外,将一个对象传递到方法或函数内部时,也会产生别名对象,也即Java中函数对象传参都是C++中的引用传参,不会在函数中产生对象副本。  
3、算术运算符
        Java的基本算术运算符与C++类似。
        关于随机数的小技巧:为了生成数字,可以首先创建一个Random(随机)对象,由于自变量是在创建过程中传递的,所以Java将当前时间作为一个“种子值”,由随机数生成器利用,通过Random对象,程序可生成许多不同类型的随机数字,做法很简单,只需调用不同的方法即可,比如nextInt()、nextLong()、nextFloat或nextDouble(),如果随同随机数生成器的结果使用,模数运算符%可将结果限制到运算对象减1的上限(%100限制在99)之下。举例说明如下:
        Random rand = new Random();
        int i = rand.nextInt() % 100;
        long j = rand.nextLong() % 100;
        float k = rand.nextFloat();
        double l = rand.nextDouble();
4、关系运算符
        关系运算符生成的是一个布尔结果。它评价的是运算对象之间的关系,若关系是真实的,关系表达式会生成true,若关系不真实,则生成false。Java中关系运算符的规则同C++,唯一的例外是对象相等比较,举例说明如下:
        //: Equivalence.java
        public class Equivalence {
            public static void main(String[] args) {
                Integer n1 = new Integer(1);
                Integer n2 = new Integer(1);
                System.out.println(n1 == n2);    //false
                System.out.println(n1 != n2);     //true
            }
        }
        上面的结果会让C++码农们大跌眼镜,事实上,==和!=比较的是对象句柄而不是其值,虽然n1和n2的值都是1,但是句柄却是不同的。
        若要比较两个对象的实际内容是否相等,必须要使用特殊方法equals(),但这个方法不适用于“主类型”(这些类型直接使用==和!=即可),将前面比较语句改成如下即可:
        System.out.println(n1.equals(n2));
        需要注意的是:equals()的默认行为是比较句柄,所以如果您创建了自己的类,就必须在自己的新类中重载equals(),否则,你还是会得到不相等的结果。
5、逻辑运算符
        逻辑运算符&&、||以及!能生成一个布尔值true或false。
        需要注意的是:只可将逻辑运算符用于布尔值,其它规则与C++类似。
6、按位运算符
        位运算符Java与C++规则类似,针对的运算对象是二进制的“位”。
        需要注意的是:按位运算符具有与逻辑运算符相同的效果,但是不会中途“短路”。
7、移位运算符
        位运算符Java与C++规则类似,针对的运算对象是二进制的“位
        需要注意的是:Java中添加了一种“无符号”右移运算符>>>,它使用了“零扩展”
,即无论正负,都在高位插入0.
8、字符串运算符+
        这个运算符很有意思,它在Java里有一项特殊的用途:连接不通的字串,这点比C++要方便多了(C++中需要重载+运算符)。
        字符串运算符+的规则是:如果表达式以一个String起头,那么后续所有运算对象都必须是字串,举例说明如下:
        int x=0, y=1, z=2;
        String str = "x, y, z";
        System.out.println(str + x + y + z);
        这里,Java编译器会将x、y和z自动转换成字串形式,而不是先把它们加到一起。
        需要注意的是:Java早期版本中必须保证表达式的第一个元素必须是字串,否则编译会出错。
9、Java没有sizeof
        在C++中,不同的CPU或操作系统或编译器都能影响到sizeof的大小,这点在C++面试题中屡见不鲜,这一点也体现了C++跨平台移植面临的问题。
        庆幸的是,Java中所有数据类型在所有机器上大小都是相同,所以其是与平台无关的语言,也就不需要sizeof来满足C++那方面的需求。
10、强制类型转换
        强制类型转换规则Java同C++,但是在Java中布尔类型是一个特例,不能将布尔进行强制类型转换成其它类型。

二、执行控制
        Java的控制语句类似于C++,关键字也包括if-else、while、do-while、for和switch,不同的是Java不支持goto,但提供受局限的类goto跳转。
1、真和假
        Java中不能像C++中用数字来当布尔值(真是非零,假是零)使用,必须用一个条件表达式来将数字转换成布尔值,比如:if (a != 0)。
2、选择语句        
        规则同C++,主要包括if-else和switch两种。
3、循环语句
        规则同C++,包括while、do-while和for三类循环控制语句。
4、中断和继续
        在任何循环语句的主体部分都可用break和continue来控制循环流程,规则同C++。
        需要注意的是:在Java中可以用break和continue跟标签合用达到C++中goto的效果,但是标签在Java中被限制在只能在循环中使用。

阅读(5739) | 评论(1) | 转发(1) |
给主人留下些什么吧!~~

scq2099yt2014-01-27 22:09:44

文明上网,理性发言...