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

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. Java之注解

    package com.demo.test; import java.lang.annotation.Documented; import java.lang.annotation.ElementTy ...

  2. 阅读jQuery源码的18个惊喜

    注释:本文使用$.fn.method指代调用一系列选中的元素的方法.例如,$.fn.addClass,指代$('div').addClass(‘blue’) 或 $('a.active’).addCl ...

  3. CHARINDEX用法

    CHARINDEX返回字符串中指定表达式的起始位置. 语法CHARINDEX ( e­xpression1 , e­xpression2 [ , start_location ] ) 参数e­xpre ...

  4. 【Struts 1】Struts1的基本原理和简介

    备注:这里介绍的是Struts1的内容,Struts2的内容,会在后续的博客的予以说明! 一.什么是Struts struts的目标是提供一个开发web应用的开源框架,Struts鼓励基于Model2 ...

  5. CLRS: online maximum (n,k)algorithm

    //the first k elements interviewed and rejected, //for  the latter n-k elements ,if value >max,re ...

  6. SVN 记录冲突、忽略

    之前对SVN不熟悉,一碰到冲突就怕得要死,不知道应该怎么处理.今天必须要正视这个问题,研究一下. 一.冲突 SVN非常智能,它不像VSS那样,一个人在改的时候必须以独占的方式签出文件,导致其他人不能够 ...

  7. docker1.12 安装redis第三方集群方案 codis

    docker1.12 安装redis第三方集群方案 codis

  8. 操作系统模仿CMD

    实验一.命令解释程序的编写 专业:商软(2)班   姓名:列志华  学号:201406114254 一.        实验目的 (1)掌握命令解释程序的原理: (2)掌握简单的DOS调用方法: (3 ...

  9. thinkphp数据库添加表单提交的数据

    $data['catename'] = I('catename');     获取表单的数据 $cate=D('cate');                               实例化cat ...

  10. C++ inline(内联什么时候使用)

    (1)什么是内联函数?内联函数是指那些定义在类体内的成员函数,即该函数的函数体放在类体内. (2)为什么要引入内联函数?当然,引入内联函数的主要目的是:解决程序中函数调用的效率问题.另外,前面我们讲到 ...