前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >非常重要 却被世人忽略的Java基础知识 原

非常重要 却被世人忽略的Java基础知识 原

作者头像
随风溜达的向日葵
发布2018-08-15 11:47:10
3230
发布2018-08-15 11:47:10
举报
文章被收录于专栏:技术墨客技术墨客

本文将一点一滴的累计记录Java中的一些细节知识。不只是加以说明,而是所有的细节都找到来源,以官方文档、知名社区的介绍为主。

StringTokenizer和String.split

代码语言:javascript
复制
    //Use StringTokenizer 
    StringTokenizer st = new StringTokenizer("this is a test");
    while (st.hasMoreTokens()) {
        System.out.println(st.nextToken());
    }
代码语言:javascript
复制
    //Use split
    String[] results = "this is a test".split("\\s");
    for (String result:results){
         System.out.println(result);
    }

关于StringTokenizer和String.split的差异说法很多。官方文档http://docs.oracle.com/javase/6/docs/api/java/util/StringTokenizer.html 有定性说明(附注:最新的JDK8 API文档中也是相同的说明)。

StringTokenizer is a legacy class that is retained for compatibility reasons although its use is discouraged in new code. It is recommended that anyone seeking this functionality use the split method of String or the java.util.regex package instead.

大意是StringTokenizer是一个历史遗留类,为了保证向后兼容性而保留这个类。推荐在新的代码中使用split或regex替换。

至于网上的测评资料说StringTokenizer比String.split效率更高,由于没有亲测就不妄加评论了。作为项目管理者,从风险和可靠性的角度考虑,在项目规范和代码review的过程中,还是以官方文档为准。

transient和volatile关键词的使用

代码语言:javascript
复制
transient volatile Set<K> keySet = null;
transient volatile Collection<V> values = null;

        transient是变量修饰符,表明该字段不是对象持久状态的一部分,储存的时候不用储存,比如序列化这个对象时,该字段是不会储存的。         volatile也是变量修饰符,只能用来修饰变量。volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。 而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。 在此解释一下Java的内存机制: Java使用一个主内存来保存变量当前值,而每个线程则有其独立的工作内存。线程访问变量的时候会将变量的值拷贝到自己的工作内存中,这样,当线程对自己工作内存中的变量进行操作之后,就造成了工作内存中的变量拷贝的值与主内存中的变量值不同。         Java语言规范中指出:为了获得最佳速度,允许线程保存共享成员变量的私有拷贝,而且只当线程进入或者离开同步代码块时才与共享成员变量的原始值对比。这样当多个线程同时与某个对象交互时,就必须要注意到要让线程及时地得到共享成员变量的变化。而volatile关键字就是提示VM:对于这个成员变量不能保存它的私有拷贝,而应直接与共享成员变量交互。 使用建议:在两个或者更多的线程访问的成员变量上使用volatile。当要访问的变量已在synchronized代码块中,或者为常量时,不必使用。由于使用volatile屏蔽掉了VM中必要的代码优化,所以在效率上比较低,因此一定在必要时才使用此关键字。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016/03/23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • StringTokenizer和String.split
  • transient和volatile关键词的使用
相关产品与服务
项目管理
CODING 项目管理(CODING Project Management,CODING-PM)工具包含迭代管理、需求管理、任务管理、缺陷管理、文件/wiki 等功能,适用于研发团队进行项目管理或敏捷开发实践。结合敏捷研发理念,帮助您对产品进行迭代规划,让每个迭代中的需求、任务、缺陷无障碍沟通流转, 让项目开发过程风险可控,达到可持续性快速迭代。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档