You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java OOP开发中如何正确修改setEmail方法的输出结果?

setEmail方法邮箱修改异常修复方案

问题描述

作为Java OOP初学者实现书籍与作者类时,setEmail方法运行不符合预期:

  • 预期执行逻辑:作者邮箱初始值为osan@gmail.com,第一次调用setEmail修改为cuscus@gmail.com,第二次调用修改为Josanne.oro@gmail.com
  • 预设校验规则:传入邮箱不合法时控制台输出Invalid email! Set to unknown,E-MAIL字段显示为Uknown
  • 实际运行时,传入合法邮箱也会被设置为Uknown,修改逻辑失效

问题根因

代码存在两处语法逻辑错误:

  1. 字符串比较误用==:Java中==对引用类型(比如String)比较的是对象内存地址,不是字符串实际内容,即使传入的邮箱内容和判断值完全一致,也会因为地址不匹配导致if条件判断为false。
  2. else分支未加块级大括号:现有代码else后没有用{}包裹逻辑范围,只有System.out.println("Invalid email! Set to unknown");这一行属于else分支,后面的this.email="Uknown";是独立语句——无论if条件是否成立,这行代码都会执行,哪怕邮箱合法也会被强制覆盖为Uknown。

修复代码

仅需修正Author类的setEmail方法即可:

void setEmail(String email) {
    // 先判空避免空指针,用equals比较字符串内容
    if(email != null && (email.equals("osan@gmail.com") 
            || email.equals("cuscus@gmail.com") 
            || email.equals("Josanne.oro@gmail.com"))) {
        this.email = email;
    } else {
        // 大括号包裹所有非法场景的执行逻辑
        System.out.println("Invalid email! Set to unknown");
        this.email = "Uknown";
    }
}

编码建议

  • 所有字符串内容比较统一使用equals()方法,只有int、boolean等基本数据类型的比较可以直接用==
  • 所有if/else/for/while等流程控制语句,哪怕分支内只有一行执行代码,也始终添加大括号,避免后续调整代码时出现逻辑归属错误
  • 对传入的引用类型参数做操作前,优先判断非空,避免触发空指针异常

内容的提问来源于stack exchange,提问作者John Cennon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 19:42:25