Java 一个语法问题 求大神们解释下

kolnick 2015-05-13 02:14:47



这种写法的好处是什么
有人知道吗 为什么不直接用defaultReadOnly判断是否为空而是重新创建一个变量
这个看某个框架中别人是这样写的
...全文
191 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
kolnick 2015-05-14
  • 打赏
  • 举报
回复
这是DBCP 框架中的代码 应该就是 @u011004037 所理解的这样的
糖几颗的 2015-05-13
  • 打赏
  • 举报
回复
个人感觉一点关系都没.. 可以直接用defaultReadOnly... 因为用的是Boolean 类型, 所以不管怎么传值, 都指向的同一个对象.. 如果担心多线程问题, 就加锁.. 这样写是解决不了多线程问题的... 唯一可能的就是... 想解决多线程问题, 但又不想加锁... 才这么写... 但是这样是没办法彻底改变多线程问题的..只能说把冲突缓解到 一行代码里面(就是那个 =号.. )
youzi05 2015-05-13
  • 打赏
  • 举报
回复
呵呵, 那样写解决不了多线程问题吗? 如果这样写

if( defaultReadOnly!=null ){
    return defaultReadOnly.booleanValue();
}
可能会读两次defaultReadOnly, 那么这当中可能会被改变,产生问题, 如果使用lz提供的代码, 只会读一次, 怎么无法解决多线程问题?虽然这里没法控制多个线程的执行顺序... 不是所有的多线程都需要加锁的, 锁加的多了, 导致多个线程串行执行, 再加上加锁的开销, 效率可能还不如单线程呢........
youzi05 2015-05-13
  • 打赏
  • 举报
回复
个人感觉可能和多线程有关, 加锁会有资源消耗而且会降低并行度, 如果在多线程环境下没有加锁直接使用下面这段代码:

public boolean getDefaultReadOnly(){
     if( defaultReadOnly!=null ){
         return defaultReadOnly.booleanValue();
    }
    return false:
}
就有可能产生错误, 因为在返回defaultReadOnly.booleanValue()的时候defaultReadOnly可能已经为null了, 解决这个问题要么加锁,要么使用lz给出的代码
rumlee 2015-05-13
  • 打赏
  • 举报
回复
我感觉这样创建一个引用没啥实际意义,实际上创建的引用指向的还是原来的对象啊,可能是各人的编码习惯吧。 我觉得这样写更方便。

public boolean getDefaultReadOnly(){
     return defaultReadOnly==null?false:defaultReadOnly.booleanValue();
}

scott_129 2015-05-13
  • 打赏
  • 举报
回复
同意楼上,主要是为了不给源数据造成修改或或者损坏吧。拷贝一份,随便你怎么弄,反正不会影响源数据。
飏飏一蝶 2015-05-13
  • 打赏
  • 举报
回复
如果直接返回其引用(包装器类自动装箱拆箱值和引用一样),可能会无意间修改其值。返回其引用的副本,就算修改了指向另一个对象,也对原值无影响。

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧