判断如下代码的执行结果:

public class Spock{
public static void main(String[] args){
Long tail = 2000L;
Long distance = 1999L;
Long story = 1000L; if( (tail>distance) ^ ((story*2)==tail ) )
System.out.print("1"); if((distance+1 !=tail) ^ ((story*2)==distance) )
System.out.print("2"); }
}

这道题考察的是逻辑运算及条件判断,同时以基本类型的包装类和自动类型转换做烟幕。

Java中的逻辑运算符有6个,三个比较常见的与(&&)、或(||)、非(!);三个用的比较少的不短路与(&)、不短路或(|)、异或(^)。

着重理解下后三个:

不短路与(&):和短路与(&&)功能相同。不同处在于短路与(&&)在判断第一个表达式错误后就不会计算其余的表达式,不短路与(&)总是会计算所有的表达式;

不短路或(|):和短路或(||)功能相同。不同处在于短路或(||)在判断第一个表达式正确后就不会计算其余的表达式,不短路或(|)总是会计算所有的表达式;

异或(^):两个表达式相同返回false;表达式不同返回true(这家伙唯恐天下不乱)。

此外这三个还是位运算符(不详说)。

基本类型的包装类。这里使用了包装类的自动装箱和自动拆箱功能。自动装箱是指可以把一个基本类型的变量直接赋给对应包装类的变量,或者赋给Object变量;自动拆箱则与之相反,可以把包装类的变量赋给对应基本类型的变量。自动拆箱和自动装箱功能是在JDK1.5之后出现的。

基本类型的自动转换遵循如下规则:

在一个算术表达式中,如果有多个不同基本数据类型的值,那么表达式的值会自动提升到表达式中最高等级数值的类型。

自动装箱时类型不会自动转换;自动拆箱时会执行自动转换(实际上是先拆箱再自动转换)。

说了这许多,再看看这题——简单的加减乘除好吧。

第一个条件判断全为true,第二个条件判断全为false,最后什么也不会输出。

so,心思还是单纯点比较好

scjp考试准备 - 2 - 逻辑运算及类型转换的更多相关文章

  1. scjp考试准备 - 10 - 类型转换

    题目为如下代码的执行结果: class Building{} public class Barn extends Building{ public static void main(String[] ...

  2. scjp考试准备 - 11 - 类型转换2

    题目如下: interface Foo{} class Alpha implements Foo{} class Beta extends Alpha{} public class Delta ext ...

  3. scjp考试准备 - 7 - Java构造器

    题目——如下代码的执行结果: class Hello{ String title; int value; public Hello(){ title += " World!"; } ...

  4. scjp考试准备 - 6 - 父类构造器的引用

    题一,如下代码的执行结果: class Person{ String name = "No name"; public Person(String nm){name = nm;} ...

  5. scjp考试准备 - 5 - 重载和重写

    如下代码,在所指示的位置插入代码能够正常编译: class Alpha{ public void bar(int... x){}; public void bar(int x){}; } public ...

  6. scjp考试准备 - 4 - 关于数组

    好吧这道题我丢脸了,竟然做错了. 如下程序的输出结果是: class Alligator{ public static void main(String[] args){ int[]x[] = {{1 ...

  7. scjp考试准备 - 3 - 关于Arrays

    判断如下程序的最终输出值: import java.util.*; public class Quest{ public static void main(String[] args){ String ...

  8. scjp考试准备 - 1 - 循环控制

    判断如下代码最后的执行结果. public class Breaker{ static String o = ""; public static void main(String[ ...

  9. scjp考试准备 - 9 - 多态

    题目为如下代码的执行结果: abstract class Vehicle{ public int speed(){ return 0; } } class Car extends Vehicle{ p ...

随机推荐

  1. ionic 嵌套view 的方法

    我一直想在一个页面的同一个 DIV 里面嵌入一个不同的 HTML文件  ....但是总是没有达到我要的效果.....才发现原来我没有加一个 name 我用angular-ui 插件 里面的样式  总是 ...

  2. cacti快速安装

    一.cacti概述 1. cacti是用php语言实现的一个软件,它的主要功能是用snmp服务获取数据,然后用rrdtool储存和更新数据,当用户需要查看数据的时候用rrdtool生成图表呈现给用户. ...

  3. mount挂载

    与ln -s 功能类似 # mount --bind /data/public /home/user/public /etc/fstab # <file system> <mount ...

  4. win7和win8如何设置快速启动栏

    a.在任务栏上右键 -> 工具栏 -> 新建工具栏 -> 跳出选择文件夹对话框,在文件夹里面(光标山洞处)输入这个路径,然后按回车: %userprofile%\AppData\Ro ...

  5. .NET 命名规范 代码示例

    class Person { /// <summary> /// 公有字段.属性 首字母大写 /// </summary> public string FirstName; p ...

  6. linux地址空间划分

    LDD讲的很明白了: Linux 是一个虚拟内存系统, 意味着用户程序见到的地址不直接对应于硬件使用的物理地址. 虚拟内存引入了一个间接层, 它允许了许多好事情. 有了虚拟内存, 系统重运行的程序可以 ...

  7. leetcode 110

    110. Balanced Binary Tree Given a binary tree, determine if it is height-balanced. For this problem, ...

  8. C#中string类型前加@标志的作用

    转自:http://stackoverflow.com/questions/4879152/c-sharp-before-a-string   (stackoverflow) string字符串前加@ ...

  9. 重装linux后

    root帐号解禁vi /etc/pam.d/gdmvi /etc/pam.d/gdm-passwd 两个装机必备软件源http://download1.rpmfusion.org/nonfree/fe ...

  10. ASP.NET MVC SignalR

    本系列博文主要介绍了 ASP.NET SignalR 的相关知识与开发,参考来源为<ASP.NET SignalR 编程实践>. 目录: SignalR背景 SignalR概述