全部来自 AI 原创生成并经逐题审校的题目,带 精品 标记的为 AI 复审通过。整卷生成请去组卷。
判断:在循环中反复执行 result = result + str 进行字符串拼接时,由于 String 是不可变对象,每次拼接都会创建新的 String 对象,因此大数据量拼接应改用 StringBuilder 的 append 方法以提高效率。即便某些编译器会自动将循环内的字符串拼接优化为 StringBuilder 实现,这一优化也并非语言规范所保证,良好实践仍应显式使用 StringBuilder。
登录后查看答案
判断:某程序员认为,只要把集合声明为泛型类型如 List<Integer>,编译器就会在程序运行时持续检查每个元素类型,从而在运行时完全杜绝 ClassCastException 的发生。
有如下 Java 代码: List<String> list = new ArrayList<>(); list.add("x"); list.add("y"); list.add("x"); Map<String,Integer> m = new HashMap<>(); for (String s : list) { if (m.containsKey(s)) m.put(s, m.get(s) + 1); else m.put(s, 1); } System.out.println(list.size() + " " + m.size() + " " + m.get("x")); 程序输出结果是( ) A. 3 2 2 B. 3 3 2 C. 2 2 1 D. 3 2 1
在 Java 中执行以下代码: List<String> list = new ArrayList<>(); list.add("x"); list.add("y"); list.add("x"); Map<String,Integer> m = new HashMap<>(); m.put("x", 1); m.put("y", 2); m.put("x", 5); 关于 list 与 m 最终存储结果的描述,正确的是: A. list 中有 3 个元素,m 中有 2 个键值对 B. list 中有 2 个元素,m 中有 3 个键值对 C. list 中有 3 个元素,m 中有 3 个键值对 D. list 中有 2 个元素,m 中有 2 个键值对
某同学编写代码:List list1 = new ArrayList(); list1.add("Java"); String s1 = (String) list1.get(0); 随后改为泛型写法:List<String> list2 = new ArrayList<>(); list2.add("Java"); String s2 = list2.get(0); 两种写法均能编译通过。对比可知,泛型写法的优势是:在____期约束元素类型,避免了 get 时向下的____转型;但泛型信息在____期会被擦除,不能通过运行时检查扩展为约束其他类型。三空答案依次为(用顿号分隔):____
阅读以下 Java 方法: public static int get() { int a = 3; try { return a; } finally { a = 99; return a; } } 调用 get() 的返回值是( ) A. 3 B. 99 C. 0 D. 抛出异常
某 Swing 程序中,窗口 JFrame 默认采用边界布局(BorderLayout)。程序执行以下操作:向窗口的 NORTH 区域添加一个面板 p1,p1 采用流式布局(FlowLayout)并依次加入按钮 b1、b2、b3;向窗口的 CENTER 区域添加面板 p2,p2 采用网格布局(GridLayout(2,3))并依次加入按钮 c1 至 c6;随后直接向窗口的 SOUTH 区域先添加按钮 s1,再添加按钮 s2。假设所有按钮尺寸均能正常显示且容器足够大,问窗口最终实际可见的按钮总数是多少? A. 11 B. 10 C. 9 D. 12
某程序向文件连续写入 25000 个字节(每次 write 1 字节)。方案甲直接使用 FileOutputStream,每写 1 字节就产生 1 次底层系统调用;方案乙在 FileOutputStream 外层套一个缓冲区大小为 8192 字节的 BufferedOutputStream,数据先存入缓冲区,缓冲区被占满时自动落盘一次,全部写完后调用 flush() 将缓冲区剩余数据一次性落盘。方案乙共产生 4 次底层系统调用,则方案甲与方案乙的底层系统调用次数之差为____。
某类中定义了共享变量 count,方法 inc() 写成:void inc(){ synchronized(lockA){ count++; } },其中 lockA 是实例字段。现有线程 t1 与 t2,t1 操作对象 obj1,t2 操作另一个新建对象 obj2,两个对象各自的 lockA 均指向同一静态共享对象 LOCK,且 count 声明为静态共享变量。请判断:由于 t1 与 t2 操作的是不同对象,二者必然无法互斥,count 仍会出现线程安全问题。
线程 T 进入某对象的 synchronized 块后,先调用 obj.wait() 进入等待,随后被其他线程 notify() 唤醒并在同一 synchronized 块内继续执行,接着又调用 Thread.sleep(5000)。关于这两个阶段中 T 所持有锁的状态,下列说法正确的是: A. 调用 wait() 和 sleep() 期间 T 均持有该对象锁 B. 调用 wait() 期间释放该对象锁,调用 sleep() 期间仍持有该对象锁 C. 调用 wait() 期间持有该对象锁,调用 sleep() 期间释放该对象锁 D. 两次调用期间 T 均释放了该对象锁
某方法声明为 synchronized,线程 T 在其中依次执行了两条语句:语句①释放了 T 持有的 this 对象锁,需调用 this.notify() 才能恢复;语句②休眠期间 T 仍紧握 this 锁不放,时间到自动恢复。下列关于语句①、②的判断,正确的是:A. 语句①是 sleep(1000),语句②是 wait() B. 语句①是 wait(),语句②是 sleep(1000),二者均定义于 Thread 类 C. 语句①是 wait(),语句②是 sleep(1000),且 sleep 定义于 Thread 类、wait 定义于 Object 类 D. 二者都释放锁,但仅 wait() 需要通知唤醒
某类中有一个共享变量 count 和两个方法:方法 f1() 用 synchronized(this) 修饰,方法 f2() 的方法体内用 synchronized(new Object()){} 包裹对 count 的修改。现有两个线程 t1 调用 f1(),t2 调用 f2(),同时修改同一对象的 count。关于两线程能否互斥,下列说法正确的是: A. 能互斥,因为两处都使用了 synchronized 关键字 B. 能互斥,因为访问的是同一个共享变量 count C. 不能互斥,因为 t1 的锁对象是 this,t2 的锁对象是新建的 Object 实例,锁对象不同 D. 不能互斥,因为 synchronized 不能修饰实例方法
某程序使用 BufferedOutputStream(缓冲区大小 8192 字节)向文件写入数据,依次调用 write() 写入 20000 字节后调用 flush(),接着再写入 100 字节后程序立即异常终止,未调用 flush() 或 close()。关于最终文件内容与缓冲流的作用,下列说法正确的是:A. 文件完整含有 20100 字节,因为缓冲流会自动定时刷新 B. 文件含 20000 字节,flush() 保证前一段落盘,而最后 100 字节仍留在缓冲区中因未刷新而丢失 C. 文件仅含 8192 字节,因为缓冲区只能容纳这么多数据 D. 文件为空,因为异常终止会清空整个缓冲流已写入的内容
某方法需要把 200 个单词依次拼接成一个句子。方案甲使用 String,在循环中执行 sentence = sentence + word;方案乙使用 StringBuilder,先创建初始对象再连续调用 200 次 append。若每执行一次「+」拼接都新建一个 String 对象,StringBuilder 仅在创建时产生 1 个对象、append 不新建对象,则方案甲共新建的 String 对象个数减去方案乙新建的对象个数,差值为 ____。
判断:某类实现了 Serializable 接口,其中字段 score 未被 transient 修饰。将一个该类对象用 ObjectOutputStream 序列化写入文件后,再用 ObjectInputStream 反序列化恢复该对象,则恢复出的对象中 score 字段的值与序列化时该对象的 score 值相同;若将 score 改为 transient 修饰后重复上述过程,则恢复出的对象中 score 字段的值为该类型的默认值(如 int 型为 0)。
判断:小张需要逐行统计一个 UTF-8 编码中文文本文件中的内容并进行字符串比对。为了提升读取速度,他先用 FileInputStream(字节流)配合 8KB 缓冲区逐字节读出,再按单个字节直接转成 char 进行处理。因为缓冲区很大、速度很快,所以这种做法既能保证中文不被截断乱码,又是处理该文本任务的最佳选择。
阅读下列 Java 代码片段: public static int calc() { int r = 5; try { return r + 10; } finally { r = r * 3; System.out.print("F" + r + " "); } } // main 中调用:System.out.println(calc()); 则程序完整输出为( ) A. F5 15 B. F15 15 C. F15 45 D. F5 45
在 Java 中,Map<String,Integer> map 用于记录每位同学的选课数量。先执行 map.put("张三", 3),再执行 map.put("李四", 2),最后执行 map.put("张三", 5)。此时 map.size() 的值为 ____,map.get("张三") 的返回值为 ____。
某开发组定义方法 void process(List<Object> list),尝试把 ArrayList<String> 传入编译报错;改用泛型方法 <T> void process(List<T> list) 后编译通过。在 process 内部调用 list.add("x") 时,若 T 已被推断为 Integer,则该行编译报错。关于泛型在此体现的作用,下列说法正确的是: A. 泛型在编译期约束元素类型,把类型错误提前到编译阶段暴露,取元素时无需强制转换 B. 泛型信息在运行时完整保留,JVM 依据它对 add 调用做运行时类型拦截 C. 泛型让不同参数类型的 List 在运行时属于不同的类,从而相互隔离 D. 泛型的主要作用是把 ClassCastException 从编译期转移到运行期再抛出
下列关于 Java 中 ArrayList 与 LinkedList 的说法,正确的是: A. ArrayList 只擅长随机访问,任何位置插入都比 LinkedList 慢 B. LinkedList 在任意位置插入元素的时间复杂度都是 O(1) C. ArrayList 尾部追加元素均摊时间复杂度为 O(1),随机访问为 O(1) D. LinkedList 随机访问第 i 个元素的时间复杂度为 O(1)