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

java 解惑 dos equis

阅读更多

这个谜题将测试你对条件操作符的掌握程度,这个操作符有一个更广为人知的名字:问号冒号操作符。下面的程序将会打印出什么呢?

public class dosequis{

 

       public static void main(string[] args){

 

              char x = 'x';

 

              int i = 0;

 

              system.out.println(true ? x : 0);

 

              system.out.println(false ? i : x);

 

       }

 

}

 

这个程序由两个变量声明和两个print语句构成。第一个print语句计算条件表达式(true ? x : 0)并打印出结果,这个结果是char类型变量x的值’x’。而第二个print语句计算表达式(false ? i : x)并打印出结果,这个结果还是依旧是’x’的x,因此这个程序应该打印xx。然而,如果你运行该程序,你就会发现它打印出来的是x88。这种行为看起来挺怪的。第一个print语句打印的是x,而第二个打印的却是88。它们的不同行为说明了什么呢?

答案就在规范有关条件表达式部分的一个阴暗的角落里。请注意在这两个表达式中,每一个表达式的第二个和第三个操作数的类型都不相同:xchar类型的,而0i都是int类型的。就像在谜题5的解答中提到的,混合类型的计算会引起混乱,而这一点比在条件表达式中比在其它任何地方都表现得更明显。你可能考虑过,这个程序中两个条件表达式的结果类型是相同的,就像它们的操作数类型是相同的一样,尽管操作数的顺序颠倒了一下,但是实际情况并非如此。

 

确定条件表达式结果类型的规则过于冗长和复杂,很难完全记住它们,但是其核心就是一下三点:

 

 

如果第二个和第三个操作数具有相同的类型,那么它就是条件表达式的类型。换句话说,你可以通过绕过混合类型的计算来避免大麻烦。

 

如果一个操作数的类型是tt表示byteshortchar,而另一个操作数是一个int类型的常量表达式,它的值是可以用类型t表示的,那么条件表达式的类型就是t

 

否则,将对操作数类型运用二进制数字提升,而条件表达式的类型就是第二个和第三个操作数被提升之后的类型。

23两点对本谜题是关键。在程序的两个条件表达式中,一个操作数的类型是char,另一个的类型是int。在两个表达式中,int操作数都是0,它可以被表示成一个char。然而,只有第一个表达式中的int操作数是常量(0),而第二个表达式中的int操作数是变量(i)。因此,第2点被应用到了第一个表达式上,它返回的类型是char,而第3点被应用到了第二个表达式上,其返回的类型是对intchar运用了二进制数字提升之后的类型,即int

 

条件表达式的类型将确定哪一个重载的print方法将被调用。对第一个表达式来说,printstream.print(char)将被调用,而对第二个表达式来说,printstream.print(int)将被调用。前一个重载方法将变量x的值作为unicode字符(x)来打印,而后一个重载方法将其作为一个十进制整数(88)来打印。至此,谜题被解开了。

 

总之,通常最好是在条件表达式中使用类型相同的第二和第三操作数。否则,你和你的程序的读者必须要彻底理解这些表达式行为的复杂规范。

 

对语言设计者来说,也许可以设计一个牺牲掉了部分灵活性,但是增加了简洁性的条件操作符。例如,要求第二和第三操作数必须就有相同的类型,这看起来就很合理。或者,条件操作符可以被定义为对常量没有任何特殊处理。为了让这些选择对程序员来说更加容易接受,可以提供用来表示所有原始类型字面常量的语法。这也许确实是一个好注意,因为它增加了语言的一致性和完备性,同时又减少了对转型的需求。

分享到:
评论

相关推荐

    Dosequis

    【Dosequis】是一款独特的字体,它在设计和应用中展现了非同寻常的创意与艺术魅力。这款字体可能因其独特的风格、线条流畅或者结构新颖而备受关注,它为设计师提供了更多的表达可能性,使得文本在视觉传达上更具吸引...

    java解惑很全的题目

    【Java解惑很全的题目】是一份专为Java学习者设计的疑难解答文档,它包含了一系列关于Java编程语言的问题和谜题,旨在帮助读者深入理解Java的核心概念、语法特性和编程技巧。以下是对其中部分题目及其涉及知识点的...

    Java解惑(中文版)

    puzzle 8:dos equis puzzle 9:tweedildum puzzle 10:tweedledee 3 przzlers with character puzzle 11:the last laugh puzzle 12:abc puzzle 13:animal farm puzzle 14:escape rout puzzle 15:hello whirled...

    java 解惑.pdf

    ### Java解惑知识点详解 #### 一、表达式谜题 **谜题1:奇数性** - **描述**:程序看似应该返回一个布尔值,表明一个数字是否为奇数,但结果却出乎意料。 - **解惑**:在进行模运算时,需要注意负数的情况。当输入...

    Java解惑(谜题)CHM中英文双版本

    谜题8:Dos Equis 谜题9:半斤 谜题10:八两 Java谜题2——字符谜题 谜题11:最后的笑声 谜题12:ABC 谜题13:畜牧场 谜题14:转义字符的溃败 谜题15:令人晕头转向的Hello 谜题16:行打印程序 谜题17:嗯...

    iava解惑,深入剖析java

    谜题8:Dos Equis 这个谜题可能与字符串操作有关,例如拼接、查找、替换等。在Java中,可以使用`String`类的方法来处理字符串。 谜题9:半斤 这个谜题可能与重量单位转换有关,涉及到浮点数运算和单位换算。 谜题...

    Java谜题Java谜题1——表达式谜题

    Java谜题1——表达式谜题 谜题1:奇数性 谜题2:找零时刻 谜题3:长整除 ...谜题8:Dos Equis 谜题9:半斤 谜题10:八两 Java谜题2——字符谜题 谜题11:最后的笑声 谜题12:ABC 谜题13:畜牧场

    常见的java疑难

    8. **Dos Equis**:条件操作符(问号冒号操作符)根据布尔表达式的值选择返回一个分支。当`true`时,返回`x`的值,`false`时返回`0`。所以,第一行打印`'X'`,第二行打印`0`。 9. **半斤八两**:`x += i`和`x = x +...

    Java™ Puzzlers: Traps, Pitfalls, and Corner Cases.chm

    Puzzle 8: Dos Equis Puzzle 9: Tweedledum Puzzle 10: Tweedledee Chapter 3. Puzzlers with Character Puzzle 11: The Last Laugh Puzzle 12: ABC Puzzle 13: Animal Farm Puzzle 14: Escape Rout Puzzle 15: ...

    Gialinh_N_Trieu_D_Midterm_FIP

    Right Guard除臭剂和Dos Equis啤酒; 一起。 您创建的品牌将具有一组品牌/广告/营销可交付成果。 ##学生 阮嘉琳 特里乌做 项目原因 最终综合项目(FIP)的目标是让每个学生在明确定义的可交付成果上单独或协同...

    清华MBA申请经验分享.ppt

    清华大学MBA项目是中国大陆地区最早获得AACSB和EQUIS双重国际认证的商学院,这标志着其在管理教育领域的卓越品质。AACSB是全球最古老的商学院认证机构,而EQUIS则是欧洲最严格的商学院质量认证体系。因此,获得这两...

    商学教育国际认证体系与我国商学一流学科建设的路径选择.pdf

    全球范围内,有三个主要的商学教育国际认证体系:美国的AACSB(Association to Advance Collegiate Schools of Business)认证、英国的AMBA(Association of MBAs)认证以及欧洲的EQUIS(European Quality ...

    南澳大学商学院宣传页.pdf

    该商学院是澳大利亚为数不多获得欧洲质量发展认证体系(EQUIS)认证的院校之一,这是一种对商学院教学、研究、国际化、社会责任感和创新等方面的全面认证。到2019年为止,全球共有180所院校获得EQUIS认证,而南澳...

    犯罪

    通用仪器公司初始安装工docker和docker-compose en equis para equir inicar el prototipo。 Una vez安装了docker和docker-compose iniciamos con descargar los datos que son necesarios。 Ejecutamos el ...

    新加坡楷博高等教育学院有些硕士合作院校.docx

    - 此外,纽卡斯尔商学院获得了AACSB, EQUIS和AMBA三项国际权威认证,这表明其在教学、研究和管理方面达到了最高标准。 2. 贝德福德大学: - 贝德福德大学是英国贝德福德郡最大的高等及专业教育机构,因其杰出的...

    香港城市大学计算机科学授课型研究生申请要求.pdf

    此外,香港城市大学作为一所国际知名的大学,其计算机科学专业在全球QS排名中名列前茅,同时获得AACSB和EQUIS的双重认证,表明了其教育质量和国际影响力。 总之,香港城市大学计算机科学授课型研究生项目为学生提供...

    ACCA无形资产资本化之争:软件开发成本(英文)2021.6(72页).pdf

    其三重认证(AACSB, AMBA, EQUIS)反映了在教育和研究领域的卓越标准。 【报告内容】报告可能涉及以下几个方面:(1) 当前软件开发成本资本化的国际会计准则;(2) 不同国家和地区在实践中的差异;(3) 软件开发成本...

    2020 MQP 中文单页.pdf

    迪肯商学院是全球前1%的商学院,拥有AACSB和EQUIS双重认证,这意味着学院在教学质量、学术标准和专业发展上达到了极高的标准,致力于不断创新课程,以确保毕业生在全球就业市场具有竞争力。 MQP课程完成后,学生...

    澳大利亚昆士兰大学-中山大学岭南(大学)学院,mba,e.pptx

    特别提到的是,QUT商学院获得了AMBA、AACSB和EQUIS三大国际认证,这是全球商科教育的最高荣誉,表明其MBA项目具有极高的标准和质量。这意味着在QUT攻读MBA的学生将接受到世界一流的教育,毕业后在全球范围内具备竞争...

Global site tag (gtag.js) - Google Analytics