前文再继, 书接上一回:
疑惑从这里来, 答案自己想。
(1)多重转型:
public class Multicast{
public static void main (String[] args){
System.out.println((int)(char)(byte) -1);
}
}
答案肯定不会那么简单的

, 下面给点提示

:
首先, 转换顺序是从右到左的,也就是说从32位硬制转换成8位,再转成16位,最后转成32位;
然后,JAVA使用的是基于补码的二进制运算;
最后,很重要的一点,byte是一个有符号类型,char是无符号类型;从byte转换成char,需要先转换成int,再转成char;转换规则可总结为:
如果最初的数值类型是有符号的,那么就执行符号扩展;如果它是char,那么不管它将要被转换成什么类型,都执行零扩展

。
(2)互换内容
学C++或C的同志们,这里要小心了public class CleverSwap{
public static void main(String[] args){
int x = 1984; // (0x7c0)
int y = 2001; // (0x7d1)
x^= y^= x^= y;
System.out.println("x= " + x + "; y= " + y);
}
}
提示:Java语言规范描述到:操作符的操作数是从左向右求值的。
(3)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);
}
}
这里需要注意三元操作符的返回类型问题:
如果第二个和第三个操作数具有相同的类型,那么它就是条件表达式的类型。换句话说,你可以通过绕过混合类型的计算来避免大麻烦。
如果一个操作数的类型是T,T表示byte、short或char,而另一个操作数是一个int类型的常量表达式,它的值是可以用类型T表示的,那么条件表达式的类型就是T。
否则,将对操作数类型运用二进制数字提升,而条件表达式的类型就是第二个和第三个操作数被提升之后的类型。
(4)自己运行一下就知道了
public class LastLaugh{
public static void main(String[] args){
char[] numbers = {'1', '2', '3'};
System.out.print("H"+"a");
System.out.print('H'+'a');
System.out.print("check out "+numbers);
System.out.print(numbers);
// \u0022 是双引号的Unicode转义字符
System.out.println("a\u0022.length()+\u0022b".length());
}
}
这么简单,没得提示!
分享到:
相关推荐
本文将针对"java解惑--疑难问题解疑"的主题,对一些常见的Java疑难问题进行详细解析,旨在帮助初学者更好地理解和解决这些问题。 1. **内存管理与垃圾回收**:Java通过自动垃圾回收机制来管理内存,这为开发者减轻...
### Java解惑——异常地危险 #### 背景与问题描述 在Java开发过程中,开发者经常需要处理多线程编程。随着Java平台的发展和完善,一些早期提供的API由于设计上的考虑不足或者潜在的安全隐患,逐渐被标记为废弃,并...
《Java解惑——最后的笑声》这篇博文主要探讨了Java编程中一些常见但往往被忽视的问题,这些问题可能会在开发过程中导致意料之外的错误或性能瓶颈。作为一个专业的IT大师,我将深入解析这些知识点,帮助你更好地理解...
### Java解惑——语法细节介绍 #### 概述 Java作为一种广泛应用的编程语言,拥有庞大的用户群体和丰富的应用场景。在日常开发过程中,我们往往会遇到一些容易忽视却又十分重要的语法细节。这些细节虽然不起眼,但...
java 解惑 java 解惑 java 解惑 java 解惑 java 解惑 java 解惑
《Java解惑(中文版)》是一本专为Java初学者设计的学习资料,旨在帮助读者解答在学习Java过程中遇到的各种困惑。"solve65p"可能代表这本书包含65个问题或主题,每个都深入浅出地进行了讲解,旨在解决初学者在编程...
表达式之谜,符号之谜,循环之谜,异常之谜,类之谜,库之谜,各种谜题。
然而,学习Java的过程中,初学者或经验丰富的开发者都可能会遇到一些棘手的问题,这就是"Java学习利器-JAVA解惑"想要解决的问题。 这份名为"JAVA解惑"的PDF文档,可能是由一位经验丰富的Java开发者或者教育者编写的...
《Java解惑》是一本专为Java初学者和进阶者设计的指南,旨在帮助读者解决在学习和实践中遇到的各种问题。这本书深入浅出地解析了Java编程中的常见困惑,涵盖了语言基础、类库应用、多线程、网络编程、异常处理、内存...
"JAVA解惑"的主题针对的是Java学习过程中遇到的一些常见问题和难点,旨在帮助开发者深入理解和解决这些问题。以下是基于这个主题和描述可能涵盖的一些关键知识点: 1. **Java基础**:这可能包括变量、数据类型、...
《Java解惑中文版》是一本专为Java程序员设计的指南,旨在帮助读者解决在编程过程中遇到的各种问题,提升程序的健壮性。本书深入浅出地探讨了Java语言的核心概念、常见疑惑以及最佳实践,旨在使开发者能够编写出更...
Java PUZZLE Java 解惑 Java PUZZLE Java 解惑 Java PUZZLE Java 解惑Java PUZZLE Java 解惑 Java PUZZLE Java 解惑 Java PUZZLE Java 解惑
《Java解惑(中文)》是一本专注于解决Java编程中常见问题和困惑的资源集合,旨在帮助初学者和有经验的开发者更好地理解和掌握Java语言。本文将深入探讨Java编程中的关键概念、常见问题以及解决方案。 1. **Java...
这份“Java解惑.pdf”文档很可能包含了解决Java开发者在编程过程中遇到的常见问题和困惑的详细解答。以下是可能涵盖的一些Java相关知识点: 1. **基础语法**:Java的基础语法包括变量、数据类型、运算符、流程控制...
《Java解惑》 布洛克 著;陈昊鹏 译 扫描清晰带目录,仅供参阅,请支持正版
文档《java解惑 PDF版》中列举了95个这样的谜题,每个谜题都旨在帮助开发者理解并纠正一些常见的错误理解。以下是根据提供的部分内容解析的几个相关知识点。 ### 表达式谜题与取余操作符(%)的行为 在Java中,...
初始化块3. 变量4. 初始化块5. 构造器从这个例子可以看出,类的初始化顺序是非常关键的,特别是在涉及多层继承时。在Java中,静态成员和静态初始化块首先被加载,因为它们属于类级别的,不依赖于任何实例对象。接...