`

java解惑(谜题5到10)

阅读更多
谜题5:多重转换
System.out.println((int)(char)(byte)-1);  //65535
java使用了基于2的补码的二进制运算,因此int型的-1的所有32位均置位的。int到byte转换,是窄化原生类型转换(narrowing primitive conversion),直接将除低8位以外的所有位全部砍掉。保留的是8位的byte,仍旧表示-1。byte到char并不是一个拓宽原生型转换,byte是有符号,而char是无符号,而是一个拓宽并窄化原生类型的转换(widening and narrowing primitive conversion):byte到int,int到char
总之,窄的整型转换成较宽的整型时符号扩展规则:如果最初的数值类型是有符号的,那么就执行符号扩展(即如果符号位为1,则扩展为1,如果为零,则扩展为0);如果它是char,那么不管它将要被提升成什么类型,都执行零扩展。

当byte转char时是符号扩展,所有的16位值为1,即65535,从char到int是无符号扩展。
谜题7:互换内容
int x = 1984;
		int y = 2001;
		x ^= y ^= x ^= y;
		
		System.out.println("x=" + x + "y=" + y); //x=0;y=1984

//交换x与y,不推荐使用,推荐用temp
	    x^=y;
		y^=x;
		x^=y;

谜题8:Dos Equis
char x = 'X';
		int i = 0;
		System.out.println(true ? x : 0);// X
		System.out.println(false ? i : x);// 88

条件表达式结果类型的规则:
(1) 如果第二个和第三个操作数具有相同的类型,那么它就是条件表达式的类型。
(2) 如果一个操作的类型是T,T表示byte、short或char,而另一个操作数是一个int类型的“字面常量”,并且它的值可以用类型T表示,那条件表达式的类型就是T。
(3) 否则,将对操作数类型进行提升,而条件表达式的类型就是第二个和第三个操作被提升之后的类型。
条件表达式的类型将确定调用哪一个重载的print方法。对于第一个表达式,将调用PrintStream.print(char),而第二个将PrintStream.print(int)
最好在条件表达式中使用类型相同的第二和第三操作数。
谜题9:半斤
short x = 0;
		int i = 123456;
		x += i;
		System.out.println(x);// -7616

		x = x + i; // 编译不通过,
Java语言规范中提到:复合赋值 E1 op= E2等价于简单赋值 E1 = (T)((E1) op (E2)),其中T是E1的类型。

复合赋值表达式自动地将所执行计算的结果转型为其左侧变量的类型。
请不要将复合赋值操作符作用于byte、short或char类型的变量;在将复合赋值操作符作用于int类型的变量时,要确保表达式右侧不是long、float或double类型;在将复合赋值操作符作用于float类型的变量时,要确保表达式右侧不是double类型。其实一句:不要将让左侧的类型窄于右侧的数字类型。
谜题10:八两
Object x = "Buy";
		String i = "Effective java";
		
		x = x+i;
		System.out.println(x);
//		x+=i;   //编译出错
复合赋值操作符要求两个操作数都是原生类型的,例如int,或包装了的原生类型,如Integer,如果在+=操作符左侧的操作数是String类型的,那么它允许右侧操作数是任意类型,执行的是字符串连接操作。
分享到:
评论

相关推荐

    java解惑 java 表达式谜题 java 字符谜题 java 循环谜题 java 异常谜题

    总结,Java编程中的谜题涵盖了许多方面,从基础语法到高级特性,每一个谜题都是提升编程技巧的机会。通过深入学习和实践,你可以逐一解开这些谜题,成为一名更优秀的Java开发者。不断探索和理解Java的内在机制,将使...

    Java解惑/Java谜题(CHM)

    我整理出来的Java解惑/谜题的CHM版本,包括目录、全文搜索和收藏夹。比目前Word/PDF版本的多个目录,比TXT版本的多一些格式。-- 如果不能打开CHM,请按下面方法解决:-- 右键点击chm文档,查看属性,可以看到...

    java解惑(java谜题)中文版的

    《Java解惑》是一本专为Java程序员设计的书籍,旨在揭示编程中常见的陷阱、误解和易犯的错误。这本书的中文版使得更多的中国开发者能够深入理解这些“谜题”,提高编程技能。Java Puzzlers是由Java之父James Gosling...

    JAVA解惑(JAVA谜题) 中文版(PDF)

    ### JAVA解惑中的关键知识点解析 #### 谜题1:奇数性的判断 在《JAVA解惑》一书中,作者通过一系列实例介绍了Java编程语言中的一些不易掌握的知识点。其中一个例子是关于如何正确判断一个整数是否为奇数。 **原始...

    java解惑 PDF版

    文档《java解惑 PDF版》中列举了95个这样的谜题,每个谜题都旨在帮助开发者理解并纠正一些常见的错误理解。以下是根据提供的部分内容解析的几个相关知识点。 ### 表达式谜题与取余操作符(%)的行为 在Java中,...

    java谜题解惑 中文chm

    在每个谜题之后都有详细的解惑方案,这些方案在给出那些实际行为与表面上迥异的程序行为的简单解释的同时,更向读者展示了如何一劳永逸地避免底层的陷阱与缺陷。 本书以轻松诙谐的语言,寓教于乐的方式,由浅入深、...

    java解惑 书籍类 谜题

    ### Java解惑 书籍类 谜题 #### Java谜题1——表达式谜题 **谜题1:奇数性** 本节讨论了一个看似简单的Java方法,旨在判断一个整数是否为奇数: ```java public static boolean isOdd(int i) { return i % 2 ==...

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

    谜题10:八两 Java谜题2——字符谜题 谜题11:最后的笑声 谜题12:ABC 谜题13:畜牧场 谜题14:转义字符的溃败 谜题15:令人晕头转向的Hello 谜题16:行打印程序 谜题17:嗯? 谜题18:字符串奶酪 谜题19...

    《Java Pazzlers》Java解惑.pdf 书签齐全

    该书特写了95个有关Java或其类库的陷阱和缺陷的谜题,其中大多数谜题都采用了短程序的方式,这些程序的行为与其看似的大相径庭。在每个谜题之后都给出了详细的解惑方案,这些解惑方案超越了对程序行为的简单解释,向...

    JAVA面试谜题解惑.pdf

    ### JAVA面试谜题解惑知识点解析 #### 表达式谜题:奇数性检查方法的缺陷 **题目背景:** 题目中提到的谜题旨在检验面试者对Java中的基本数学运算符及其行为的理解程度。具体来说,是针对取余运算符`%`在处理整数...

    java解惑(+Java 解惑你知多少)

    本书特写了95个有关Java或其类库的陷阱和缺陷的谜题,其中大多数谜题都采用了短程序的方式,这些程序的行为与其看似的大相径庭。在每个谜题之后都给出了详细的解惑方案,这些解惑方案超越了对程序行为的简单解释,向...

    java解惑(源代码+教程)

    《Java解惑》是一本由Google工程师编写的经典教材,旨在帮助开发者解决在实际编程过程中遇到的困惑和误解。这本书通过一系列精心设计的“Java谜题”,揭示了语言中的一些不直观特性和陷阱,从而提升读者对Java深层...

    Javapuzzler+JAVA解惑 中英双语 完整源代码

    《Javapuzzler+JAVA解惑 中英双语 完整源代码》是一份集学习与实践于一体的Java编程资源,包含《Java Puzzlers》和《JAVA解惑》两部分,以及对应的完整源代码。这份资料对于深入理解Java语言的特性和陷阱,提升编程...

    java谜题解惑 中文版.rar

    java谜题解惑This Fifth Edition is completely revised and expanded to cover JavaScript as it is used in today's Web 2.0 applications. This book is both an example-driven programmer's guide and a keep-...

    Java解惑ppt5

    《Java解惑PPT5》深入探讨了Java编程中的一些常见困惑和陷阱,特别是关于类、构造器重载以及静态域的使用。以下是对其中两个关键Puzzle的详细解析: **Puzzle 46:令人混淆的构造器** 在这个谜题中,作者展示了...

Global site tag (gtag.js) - Google Analytics