基础回顾(一)

1.基本数据类型
  1. byte/8

  2. short/16

  3. int /32

  4. long/64

  5. float/32

  6. double/64

  7. boolean/~

  8. char/16

    boolean没有具体的长度类型 在jvm中会将它默认变为int类型

    2.包装类型
    1. Byte
    2. Short
    3. Integer
    4. Long
    5. Float
    6. Double
    7. Boolean
    8. Character
Integer x = 2;     // 装箱 调用了 Integer.valueOf(2) 自动装箱
int y = x;         // 拆箱 调用了 X.intValue() 自动拆箱
3.缓存池

在一定范围内会创建一个缓冲池,在这个缓存池范围内下次进行取值 就不用再进行new对象

  • /** * Returns an {@code Integer} instance representing the specified * {@code int} value.  If a new {@code Integer} instance is not * required, this method should generally be used in preference to * the constructor {@link #Integer(int)}, as this method is likely * to yield significantly better space and time performance by * caching frequently requested values. * * This method will always cache values in the range -128 to 127, * inclusive, and may cache other values outside of this range. * * @param  i an {@code int} value. * @return an {@code Integer} instance representing {@code i}. * @since  1.5 */
    
public static Integer valueOf(int i) {   
    if (i >= IntegerCache.low && i <= IntegerCache.high)   
        return IntegerCache.cache[i + (-IntegerCache.low)];  
         return new Integer(i);如果这个数值在-128-127直接 虚拟机直接从缓冲池拿 不然就要new一个全新的对象 
             valueOf() Integer=i会触发自动拆箱 
             new一个对象 必然会在堆上创建一个对象 毋庸置疑 
             Integer i=0;
             Integer j=1;
             System.out.println(i==j);//始终为false
      
}

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

  • 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
4.String

1.final修饰的类 表示这个类不可以被继承–>为什么不可以被继承

public final class String implements java.io.Serializable, Comparable<String>, CharSequence {
XXX
}

final主要还是作用于性能和安全性:

性能:(1)final关键字使得所有的方法和属性都是final的,可以让java虚拟机找到内联的机会 将函数进行内联

优化 可以提升50%性能

(2)正因为String是final才会引入String的缓冲池技术,当缓冲池里面有一个对象是缓存的,有若干个变量去在

指向这个唯一的对象,如果String是可变的,那么将导致这些变量所指向的都会混乱。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WYzJQw9a-1575890757267)(C:\Users\Administrator\Desktop\个人收藏\1575887180097.png)]

安全性:(1)java一直是一个安全性的操作系统,很多危险操作都不允许开发者去尝试,比如说病毒,病毒涉及到底层,这里就要说到java大名鼎鼎的native调用,其底层偏向于操作系统,而String是我们用得比较多的对象如果String不定义成Final类型,很容易继承之,然后生成不必要的类,还有可能威胁底层系统安全,所以定义成final必然有它的好处.

(2)正因为String不可变,例如我们在连接数据库 数据库连接信息和socket编程之中都需要String来参与,如果String是可变的 ,如果图谋不轨的人改变字符串指向的对象的值,造成安全漏洞。

(3)final导致String是线程安全的,不需要额外的进行线程同步操作,进一步提升了性能.无法被其他线程共享并修改

(4) 因为字符串是不可变的,所以在它创建的时候hashcode就被缓存了,不需要重新计算。这就使得字符串很适合作为Map中的键,字符串的处理速度要快过其它的键对象。这就是HashMap中的键往往都使用字符串

/** Cache the hash code for the string */private int hash; // Default to 0
三、运算
1.参数传递

(1)java 的参数是以值传递的形式传入方法中,而不是引用传递。

值传递:指的是在类中定义一个变量,传递到函数中,只是当前值的一个副本,对原来的值没有任何影响

引用传递(其实也是值传递):指的是在函数中传入对象,传递进去的是此对象在堆上的地址 如果在函数中对此变量做另一次new操作 那么剩下的操作对原来的操作没有影响 所作出的更改可以对改变量所指向的对象产生直接影响.

2.参数类型转换

1.java不支持向下类型转换

例如:double不可以向float向下转型

(2)java存在隐式类型转换 short i=1 不可以 但是 short i+=1可以 因为内部优化为(short)(i+1)可以通过编译

3.Switch

java7实现对String的支持 不支持对long的支持 因为switch的设计初衷就是轻量化 尽量是比较小范围值的比较 支持的有:

- 基本数据类型:int,byte,short,char
- 基本数据类型封装类:Integer,Byte,Short,Character
- 枚举类型:Enum(JDK 5+开始支持)
- 字符串类型:String(JDK 7+ 开始支持)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值