Java知识点汇总

1.数据类型

1.1装箱和拆箱问题

1.2 缓存

从深入理解Java虚拟机一书来说,是不存在这个说法的。从大部分百度而来的结果,就是说如下:

123,这个数字存在哪里? 这个从JVM来说,它是存在常量池中的。

按照缓存池的说法,int的缓存范围是-128~127,那我们用220来测试下结果。

private void cachePool(){
        Integer a = Integer.valueOf(220);
        Integer b = Integer.valueOf(220);
        AppLog.i(String.valueOf(a == b));

        Integer c = Integer.valueOf(123);
        Integer d = Integer.valueOf(123);
        AppLog.i(String.valueOf(c == d));

        Integer e = 220;
        Integer f = 220;
        AppLog.i(String.valueOf(e == f));

        Integer g = 123;
        Integer h = 123;
        AppLog.i(String.valueOf(g == h));
    }

结果是false,true,false,true。

这里的理解是有误的。首先常量池存的是字符串,比如“abc”,abc存在常量池里面。s = "abc",这个时候,s并不在常量池。

在会过来说缓存池。在java中,当int的范围是【-128,127】时,JVM事先把这个范围内的数值,先存放在堆里面。所以对123的使用,缓存池的地址。

基本类型对应的缓冲池如下:

  • boolean values true and false
  • all byte values
  • short values between -128 and 127
  • int values between -128 and 127
  • char in the range /u0000 to /u007F

    1.3 常量池

    常量池只要针对字符串常量,这个上文有说到,字符串会在使用的时候,存放到常量池中。

    String s1 = "abc";
        String s2 = "abc";
        AppLog.i(String.valueOf(s1 == s2));

    结果是true,更进一步,把s2换成“abc”,还是true。也就是s1和s2都是常量池一个地址的引用。

    1.4 String

    最重要的是不可变性:

    String 由final char[]value,由于final修饰,所以value不能指向其他数组,并且string内部没有修改value的方法,所以String是不可修改的。

    hashcode可以缓存,应为不变。

    StringPool机制,这个就是上面说的常量池。

    String是线程安全的。

    StringBuild不是线程安全

    StringBuffer线程安全,内部有synchronized

    String.intern(),这个方法会主动把字符串放入常量池。

    1.5 精度问题

    Java 不能隐式执行向下转型,因为这会使得精度降低。

    short s = 1;
        /*1是int类型,所以+以后转换为int类型,强转为short型*/
        s = (short) (s+1);
        /*支持隐私转换*/
        s +=1;

    1.6 static

    1.6.1 static 变量

    其他从JVM角度来讲,static的变量和类没有关系,类的实例是在java heap里面new出来的。而static 变量存在于方法区。类名只是为了找到这个全局变量的位置而已。(C++的说法,全局变量,功能类似)

    1.6.2 static方法

    静态方法也是独立于类的存在,所以静态方法必须实现。存在于JVM的方法区。

    1.6.3 static代码

  • 首先这部分代码,只有在类使用的时候,才会被加载。
  • 其次,它只会运行一次,或者说在类加载的时候,被运行。而不是new一个类的时候,所以它比new 更早。
  • 构造代码块,也就是没有static,这个很显然,是在每次构造的时候调用。其次,每次都会调用。可以理解为是构造函数的一部分。

    1.6.4 static内部类

    从JVM的角度看,只是一个命名方式而已,跟外部类,是完全不想干的2个类。

原文 

http://www.demanmath.com/index.php/2020/07/09/javazhishidianhuizong/

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » Java知识点汇总

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址