美文网首页Java学习之路
关于int与Integer的一个发现

关于int与Integer的一个发现

作者: 椰子奶糖 | 来源:发表于2019-08-22 13:52 被阅读115次

刚刚测试Sql的时候发现了一个小问题,具体测试代码如下:

@Test
    public void testCountByCondition() {
        FollowFans followFans = new FollowFans( );
        System.out.println(followFans);
        followFans.setFansId(1);
        System.out.println(followFansMapper.countByCondition(followFans));
    }
  • 我的小问题就是其实是由一句sql引起的,它主要干的一件事儿,就是id不为空才把条件加到where中去,再去查询
 <select id="countByCondition" resultType="java.lang.Integer">
        SELECT count(*) FROM follow_fans
        <where>
            <if test="followId!=null">
                follow_id=#{followId}
            </if>
            <if test="fansId!=null">
                AND fans_id=#{fansId}
            </if>
        </where>
    </select>

从测试类可以看到 我只加了一个值,另外的followId并没有加,而最终传的sql却是两个条件都有,神奇的是followId居然有个0值

==>  Preparing: SELECT count(*) FROM follow_fans WHERE follow_id=? AND fans_id=? 
==> Parameters: 0(Integer), 1(Integer)
<==    Columns: count(*)
<==        Row: 0
<==      Total: 1

开始分锅

  • 到底是sql的问题还是类的问题,我觉得都对哈哈
  • 咳咳,打印了一下没有任何赋值的followFans 对象,发现三个值都是0,这就有点蹊跷了,它的无参构造类不干赋值的事儿,也就是说,这个0是自带的?或者说是默认值?
followFans{id=0, followId=0, fansId=0}

int的默认值

  • 在Java中int在对象中是会给一个默认值的,就是0,别的情况是不会又默认值的。

没有默认值的Integer

  • 在我把类型改回Integer后,测试得以成功,而通过打印也发现,Integer在对象中并不会自动赋默认值,或者说,没有默认值。

小结

在数据库中int还是对应的Integer,但是Java默认可以用int代替Integer不知是方便编程者还是,再来添点乱哈哈

相关文章

网友评论

    本文标题:关于int与Integer的一个发现

    本文链接:https://www.haomeiwen.com/subject/zkjnsctx.html