Java 方法的返回值到底用基本类型好还是包装类型好 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ohyeahhh
V2EX    Java

Java 方法的返回值到底用基本类型好还是包装类型好

  •  2
     
  •   ohyeahhh 2019-05-21 11:25:41 +08:00 6464 次点击
    这是一个创建于 2338 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近一直有这个疑问,百度也搜了,找不到满意的答案,所以来问问神通广大的 V 友们

    32 条回复    2019-05-30 18:51:43 +08:00
    HongJay
        1
    HongJay  
       2019-05-21 11:30:43 +08:00
    基本类型吧
    lofbat
        2
    lofbat  
       2019-05-21 11:34:14 +08:00 via iPhone
    个人觉得对象类型更灵活,看下面有没有高见
    NeinChn
        3
    NeinChn  
       2019-05-21 11:34:26 +08:00   6
    如果不需要区分 0 和 null,那就基本类型
    不然就统一用包装类型
    BCy66drFCvk1Ou87
        4
    BCy66drFCvk1Ou87  
       2019-05-21 11:37:11 +08:00
    包装类吧,能涵盖返回为 null 的情况
    cxtrinityy
        5
    cxtrinityy  
       2019-05-21 11:39:53 +08:00 via Android   2
    这难道不是看需要的么?一般返回基本类型就够了,毕竟只要一个值,创建对象也是要开销的
    ohyeahhh
        6
    ohyeahhh  
    OP
       2019-05-21 11:41:59 +08:00
    个人感觉是不是 如果方法返回值可能会做比较时用包装类型,如果只是单纯的用一下,就直接用基本类型就可以了
    lhx2008
        7
    lhx2008  
       2019-05-21 11:42:22 +08:00   1
    如果有可能返回 null,用 Optional 包装
    如果不会返回 null,用基本类型就行,向标准库看齐
    Luckyray
        8
    Luckyray  
       2019-05-21 11:45:33 +08:00   1
    包装类,不然会有默认值的问题。
    ohyeahhh
        9
    ohyeahhh  
    OP
       2019-05-21 11:45:49 +08:00
    @lhx2008 感觉这样的话好像就把包装类型的特性给抛弃了
    Takamine
        10
    Takamine  
       2019-05-21 11:46:40 +08:00
    看业务吧,但是推荐包装类,对于具体的返回 NPE 等给调用者去保证。
    szq8014
        11
    szq8014  
       2019-05-21 11:52:21 +08:00
    取决于习惯吧,我个人是用基本类型的
    lhx2008
        12
    lhx2008  
       2019-05-21 11:54:06 +08:00 via Android
    @ohyeahhh 有啥特性,Optinnal 也是包装类呀,Optinal<Interger>
    bxb100
        13
    bxb100  
       2019-05-21 11:57:32 +08:00 via Android
    你想优化的话就用基本类型,一般使用包装类型
    reeco
        14
    reeco  
       2019-05-21 11:59:18 +08:00 via Android
    全部用包装类型
    zisway
        15
    zisway  
       2019-05-21 2:19:26 +08:00
    对外接口返回值用包装类型,内部私有的基本类型就可以了。
    micean
        16
    micean  
       2019-05-21 12:31:44 +08:00
    基本类型能显著的告诉调用者不必做非空检查,如果有这个必要的话
    否则以减少拆装包为优先
    ChanKc
        17
    ChanKc  
       2019-05-21 12:42:03 +08:00
    Effective Java Item 61: Prefer primitive types to boxed primitives

    包装类型效率低而且容易产生 NPE,实际上就是把 NPE 甩锅给调用者。负责任的程序员都会用基本类型,即便用包装类型也应该写好 javadoc。
    zxcjqyy
        18
    zxcjqyy  
       2019-05-21 12:42:18 +08:00
    看情况灵活应用呀
    johnniang
        19
    johnniang  
       2019-05-21 12:47:26 +08:00 via Android
    如果有业务需求,建议用 Optional<Type>;
    如果很纯粹,那就返回基本类型即可。
    rockyou12
        20
    rockyou12  
       2019-05-21 12:53:00 +08:00
    能用基本类型绝不要用包装类,我清楚很多用包装类型是应为数据库默认值一般为 null。但用包装类型生产环境的空指针异常会让你想死(特别是 java 的自动装箱、拆箱,你写的时候根本不会考虑数据是不是 null 的)。这点 kotlin 有?来保证安全,真的好太多
    nkduqi
        21
    nkduqi  
       2019-05-21 13:10:17 +08:00
    如果是对外的接口,一般不适用基本类型,都使用包装类型;
    如果是应用内部自己用,则可以使用基本类型;
    guyeu
        22
    guyeu  
       2019-05-21 14:14:38 +08:00
    1. 优先项目内部代码规范;
    2. 如果你的方法设计上不会返回 null,请使用基本类型;
    3. 如果你的方法设计上会返回 null,使用 Optional 包装,在语义上告诉使用者返回值有可能为空;
    enaxm
        23
    enaxm  
       2019-05-21 14:20:00 +08:00
    对内你随意,不过我一般用包装类型,想到之前有个同事问我 int 能不能返回 null,我都不知道怎么吐槽。。。

    系统内部一般有共有的工程打成 jar 包,常见的错误类型、宏定义等等,maven 里头连着 nexus,maven 中引入这个包

    对外一般不返回一个当然包装
    c4f36e5766583218
        24
    c4f36e5766583218  
       2019-05-21 14:40:26 +08:00
    boolean,其它包装?
    cuzfinal
        25
    cuzfinal  
       2019-05-21 17:25:29 +08:00
    用基本对象,减少装箱
    alittlefun
        26
    alittlefun  
       2019-05-21 18:40:13 +08:00 via Android
    参考 api 返回类型
    itechify
        27
    itechify  
    PRO
       2019-05-21 19:54:16 +08:00 via Android
    看需求~假如纯属自己做接口,爱咋用就咋用,写清楚返回是什么含义就行了
    sagaxu
        28
    sagaxu  
       2019-05-21 21:52:58 +08:00 via Android
    java 标准库都是返回基本类型,Java 标准制定者们,应该比较懂 Java 吧

    如果同事都是菜鸡,还是建议装箱类型,他们需要
    BlackZhu
        29
    BlackZhu  
       2019-05-22 10:50:31 +08:00
    请教一下 我想返回一条数据 不创建实体的话 难道装在 map 里面返回吗?
    BlackZhu
        30
    BlackZhu  
       2019-05-22 10:55:18 +08:00
    如果返回实体的话会有很多空字段 但是给每个方法写不同的 dto 又太繁琐了 各位是如何处理的?
    nekoneko
        31
    nekoneko  
       2019-05-22 11:01:11 +08:00
    @BlackZhu 反 Object
    lazyfighter
        32
    lazyfighter  
       2019-05-30 18:51:43 +08:00
    包装类,null 跟 0 有可能两个含义
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     920 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 20:53 PVG 04:53 LAX 13:53 JFK 16:53
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86