Java编程陷阱:理解奇数判断问题与优化技巧

发布时间:2025-02-24 06:15

练习解决问题的能力,编程就是不断解决实际问题的过程。 #生活技巧# #数码产品使用技巧# #编程入门指南#

尽管 char 是一个整数类型,但是许多类库都对其进行了特殊处理,因为 char

数值通常表示的是字符而不是整数。例如,将一个 char 数值传递给 println 方

法会打印出一个 Unicode 字符而不是它的数字代码。字符数组受到了相同的特殊

处理:println 的 char[]重载版本会打印出数组所包含的所有字符,而

String.valueOf 和 StringBuffer.append 的 char[]重载版本的行为也是类似的。

然而,字符串连接操作符在这些方法中没有被定义。该操作符被定义为先对它的

两个操作数执行字符串转换,然后将产生的两个字符串连接到一起。对包括数组

在内的对象引用的字符串转换定义如下[JLS 15.18.1.1]:

如果引用为 null,它将被转换成字符串"null"。否则,该转换的执行就像是不

用任何参数调用该引用对象的 toString 方法一样;但是如果调用 toString 方法

的结果是 null,那么就用字符串"null"来代替。

那么,在一个非空 char 数组上面调用 toString 方法会产生什么样的行为呢?数

组是从 Object 那里继承的 toString 方法[JLS 10.7],规范中描述到:“返回一

个字符串,它包含了该对象所属类的名字,'@'符号,以及表示对象散列码的一

个无符号十六进制整数”[Java-API]。有关 Class.getName 的规范描述到:在

char[]类型的类对象上调用该方法的结果为字符串"[C"。将它们连接到一起就形

成了在我们的程序中打印出来的那个丑陋的字符串。

有两种方法可以订正这个程序。你可以在调用字符串连接操作之前,显式地将一

个数组转换成一个字符串:

System.out.println(letters + " easy as " +

String.valueOf(numbers));

或者,你可以将 System.out.println 调用分解为两个调用,以利用 println 的

char[]重载版本:

System.out.print(letters + " easy as ");

System.out.println(numbers);

请注意,这些订正只有在你调用了 valueOf 和 println 方法正确的重载版本的情

况下,才能正常运行。换句话说,它们严格依赖于数组引用的编译期类型。

下面的程序说明了这种依赖性。看起来它像是所描述的第二种订正方式的具体实

现,但是它产生的输出却与最初的程序所产生的输出一样丑陋,因为它调用的是

println 的 Object 重载版本,而不是 char[]重载版本。

class ABC2{

public static void main(String[] args){

String letters = "ABC";

Object numbers = new char[] { '1', '2', '3' };

System.out.print(letters + " easy as ");

System.out.println(numbers);

}

}

网址:Java编程陷阱:理解奇数判断问题与优化技巧 https://www.yuejiaxmz.com/news/view/791640

相关内容

Java网络请求优化:解决请求延迟慢问题的实用技巧与案例分析
揭秘Java框架私活:实战技巧与职场生存指南
Java 函数性能优化技巧有哪些?
Java编程解决生活中的实际问题:高效便捷的解决方案指南
实施流程自动化和人工智能:最佳实践与应避免的陷阱
PyTorch经验指南:技巧与陷阱
Java 性能优化的五大技巧
如何进行压力面试,遇到面试陷阱问题怎么办?
【C++ 函数设计的艺术】深挖 C++ 函数参数的选择 智能指针与 std::optional:最佳实践与陷阱
Android 7.1省电优化技巧:Java代码优化与系统级电量管理实践

随便看看