尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Java 基础避坑与原理:Scanner、泛型与 ArrayList

Java 基础避坑与原理:Scanner、泛型与 ArrayList
📅 发布时间:2026/6/20 6:07:37

内容由AI生成

Java 基础避坑与原理:Scanner、泛型与 ArrayList(含源码验证)

1. Scanner 的“回车符”陷阱

现象:
在使用 Scanner 时,如果先调用 nextInt(),紧接着调用 nextLine(),第二个字符串输入会直接跳过(读到空字符串)。

int num = sc.nextInt();
String str = sc.nextLine(); // 还没输入就结束了?

原理:

  1. 缓冲区残留:nextInt() 读取数字后,将结束符(回车 \n)留在了输入缓冲区中。
  2. 读取机制:nextLine() 以换行符为结束标志。它刚启动就读取到了残留的 \n,认为一行结束,于是返回空字符串。
  3. 注意:next() 会自动跳过空白符,所以没有这个问题。

解决方案:

  • 方案 A:在 nextInt() 后加一句 sc.nextLine() 手动吃掉回车。
  • 方案 B(推荐):统统使用 nextLine() 读取,再通过 Integer.parseInt() 转换,彻底避坑。

2. 泛型与基本类型(ArrayList<int>)

现象:
ArrayList<int> 编译报错,必须写成 ArrayList<Integer>。

核心原理:

  1. 类型擦除:Java 泛型是伪泛型,编译后泛型类型会被擦除为 Object。
  2. 不兼容:基本类型(int)不是对象,无法转换为 Object,因此泛型不支持基本类型。

面试高频点:

  • 自动装箱/拆箱:编译器自动在 int 和 Integer 间调用 valueOf() 和 intValue()。
  • 空指针异常 (NPE):Integer 默认为 null,如果自动拆箱赋值给 int 会崩。
  • Integer 缓存池:-128 到 127 之间的数字,Integer.valueOf() 会复用缓存对象。
    • Integer a=100, b=100; a==b (true,走缓存)
    • Integer c=200, d=200; c==d (false,new 新对象)
    • 结论:包装类比较一定要用 .equals()。

3. ArrayList 的初始化与扩容机制

疑问: new ArrayList<>() 初始大小是多少?会频繁扩容影响性能吗?

源码真相(JDK 1.8+):

  1. 懒加载机制:
    • 执行 new 时,底层数组指向空数组,物理容量为 0。
    • 执行第一次 add() 时,才初始化底层数组,容量直接变为 10。
  2. 扩容策略:
    • 触发时机:数组填满时。
    • 增长幅度:1.5 倍。
    • 演变:0 -> 10 -> 15 -> 22 -> 33 ...

源码验证(IDEA实操):
想亲眼确认?按住 Ctrl (Mac 为 Cmd) 点击代码中的 ArrayList 进入源码:

  1. 验证懒加载:

    • 搜索构造方法 public ArrayList()。
    • 代码:this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
    • 解读:赋值的是一个空数组,证明初始并未分配内存。
  2. 验证 1.5 倍扩容:

    • 搜索 grow(int minCapacity) 方法。
    • 代码:int newCapacity = oldCapacity + (oldCapacity >> 1);
    • 解读:>> 1 表示右移一位(即除以 2 取整)。
    • 计算示例 (15 -> 22):15 + (15 >> 1) = 15 + 7 = 22。
    • (注:Java 整数运算自动舍弃小数部分,并非四舍五入)

性能总结:

  • 由于是倍增策略,数据量越大扩容频率越低,一般场景下不会有严重性能问题。
  • 最佳实践:如果预知数据量(如 1000 条),建议直接指定容量 new ArrayList<>(1000),避免中间的数组拷贝开销。

相关新闻

  • 深入解析:二叉树、动态规划与链表学习
  • 2025年内蒙古十大钢结构工程设计公司推荐:钢结构工程设计公
  • 2025资质齐全的品牌策划企业TOP5推荐:美御品牌策划实力

最新新闻

  • Super Productivity:Docker容器化部署完全指南,打造个人生产力中心
  • HarmonyOS6踩坑记录之卡片开发 @Prop 和 @Link 搞混了?3 个坑帮你彻底搞懂父子组件传值
  • GPT-Image-2渲染产品图全教程:提示词结构、多轮迭代与实测数据
  • doom-ascii控制指南:从基础移动到高级战斗的快捷键全攻略
  • 2026年市场靠谱的工艺品设计趋势平台口碑排行情况
  • DBeaver连接PostgreSQL:界面异常排查与修复实战指南

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号