# 数组排序
---
## 问题
题目:下面代码会发生什么错误?为什么?
```
Object [] myObject = {
new String("foo"),
new Integer(12),
new String("foo"),
new Integer(5),
new Boolean(true)
};
Arrays.sort(myObject);
---
// 程序
package com.devin.java;
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
Object [] myObject = {
new String("foo"),
new Integer(12),
new String("foo"),
new Integer(5),
new Boolean(true)
};
Arrays.sort(myObject);
}
}
```
## 结果
第8行会发生一个运行期异常,
java.lang.ClassCastException。
## 结论
#### 因为Arrays类中的sort方法,如果对Object[ ]数组排序,首先要求所有元素都实现了Comparable接口,其次在运行时,将把每个元素都强制转换成第一个元素的类型。
#### Tips:题目中的数组元素类型有String、Integer、Boolean,都实现了Comparable接口。Arrays类进行排序时,会尝试把所有元素都转换成第一个元素的String类型,因此发生运行期异常。Arrays类是Java数组的一个工具类。
- 操作说明
- ReadMe
- 第1部分 Java 基础编程
- 第01章 Java 语言概述与开发环境搭建
- 第02章 面向对象编程概念
- 第03章 数据类型与运算符
- 第04章 流程控制
- 第05章 数组
- 第06章 Java 面向对象
- 第07章 Java 基础类库
- 第08章 Java 集合
- 第09章 Java 输入\输出
- 第10章 多线程
- 第11章 网络编程
- 第12章 异常处理
- 第13章 JDBC 编程
- 第14章 Annotation(注释)
- 第15章 泛型
- 第16章 类加载机制与反射
- 第2部分 Java 高级特性
- 第01章
- 第3部分 Java 知识点辨析
- 1.(1-12=12):String类和String的比较
- 01.用==比较String
- 02.String用=赋值
- 03.用equals方法比较String
- 04.如何判断一个String不是空值
- 05.字符串的不可变性
- 06.字符串与基本数据类型的转换
- 07.使用new创建字符串对象
- 08.用==比较字符串常量
- 09.把基本数据类型转换成String
- 10.如何比较String的字典顺序
- 11.String与StringBuffer的区别
- 12.StringBuffer与StringBuilder的区别
- 2.(13-20=8):修饰符与运算符
- 01.private修饰符
- 02.do-while及++
- 03.?:=操作符
- 04.float与double
- 05.用==比较基本数据类型
- 06.char存储中文
- 07.逻辑与运算符
- 08.以为运算符
- 3.(21-27=7):运算符、语法相关
- 01.或运算符
- 02.异或运算符
- 03.用==比较
- 04.if/else 分支语句
- 05.switch语句
- 06.switch的变量类型
- 07.循环中的break和continue
- 4.(28-41=14):面向对象辨析
- 01.引用类型值传递(一)
- 02.引用类型值传递(二)
- 03.基本数据类型值传递
- 04.static方法
- 05.static属性
- 06.final属性
- 07.默认构造方法
- 08.单继承特性
- 09.this关键字的作用
- 10.静态方法中的this
- 11.方法重载
- 12.继承中的构造方法(一)
- 13.继承中的构造方法(二)
- 14.继承中的构造方法(三)
- 5.(42-59=18):面向对象相关
- 01.方法覆盖(一)
- 02.方法覆盖(二)
- 03.父类引用指向子类对象(一)
- 04.父类引用指向子类对象(二)
- 05.super关键字(一)
- 06.super关键字(二)
- 07.抽象类
- 08.抽象方法
- 09.抽象类与抽象方法的关系
- 10.final类
- 11.final方法
- 12.Object类(一)
- 13.Object类(二)
- 14.继承与关联
- 15.接口的概念
- 16.抽象类与接口的区别
- 17.extends与implements
- 18.接口作为引用类型
- 6.(60-67=8):数组
- 01.数组的声明与赋值
- 02.数组的长度
- 03.二维数组的长度
- 04.使用增强for循环迭代数组
- 05.二维数组
- 06.数组的类型
- 07.对象型数组
- 08.数组排序
- 7.(68-83=16):异常处理
- 01.Exception与Error的区别
- 02.多个catch语句
- 03.finally语句
- 04.运行时异常
- 05.空指针异常
- 06.运行时异常的具体类
- 07.checked与unchecked异常
- 08.try、catch、finally(一)
- 09.try、catch、finally(二)
- 10.try、catch、finally(三)
- 11.finally与return
- 12.throw与throws
- 13.异常只能被捕获一次
- 14.throw与throws的应用
- 15.自定义异常
- 16.继承中的异常
- 8.(84-92=9):集合
- 01.Collection与Map
- 02.Collection与Collections的区别
- 03.Set与List的区别
- 04.ArryList与LinkedList
- 05.ArryList与Vector
- 06.HashMap与Hashtable
- 07.泛型集合
- 08.HashSet与TreeSet
- 09.HashMap与TreeMap
- 9.(93-100=8):多线程
- 01.Math类(一)
- 02.Math类(二)
- 03.Math类的random方法
- 04.Thread的实现方式
- 05.多线程共享数据
- 06.synchronized
- 07.join方法
- 08.线程间通讯
- 附录 1 面向对象
- 1 面向对象概述
- 1.1.对象的概念