目标:
提示:一篇基础java
例如:
- 一篇基础Java
- 一个Spring视频
学习记录:
- assert(断言)的作用
- 理解和正确使用Java中的断言(assert)_u010142437的博客-CSDN博客_java 断言
- 例子,这个是从Interger中创建缓存池的那个代码里面抠出来的,而它定死了里面缓存池的值有-128~127,因为它断言常量池最大值为127,所以你的high一定会>=127,否则就会报错AssertionError
assert IntegerCache.high >= 127;
- Integer 的缓冲池 IntegerCache 很特殊,它可以通过参数去调整缓存池的大小,从而调整里面有多说缓存的值
- -XX:AutoBoxCacheMax=<size>
- String
- java8中用char[]存储,java9用byte,并且java9可以使用coder在识别编码
- 不可变的好处
- 缓存hash值
- 线程安全
- String pool需要
- String、StringBuffer和StirngBuilder的区别
- 1.Sring不可变,StringBuffer和StringBuilder可变
- 2.String、StringBuffer线程安全,StringBuilder线程不安全
- StringBuffer内部使用 synchronized 进行同步,就很 安全
- 如何记住:StringBuffer,String挡板,将所有入侵者挡住,所以很安全
- String Pool 在不同版本下的区别:
- java7前,String Pool 被放在运行时常量池中,它属于永久代。
- java7,将String Pool 被移到堆中,因为永久代的坑位有限,所有坑都占满了容易导致内存溢出
- 经典问题:new String("abc")有几个对象
- 大老婆:在编译的时候就会被创建出来放到StringPool中
- 二老婆:在堆中创建一个对象,堆里的对象的value指向大老婆,为大老婆马首是瞻
- 当然 有大老婆的时候,就只需要小老婆了,那么就是有1~2个对象
- 参数传递
- 都是值传递,不是引用传递
- Dog dog 的 dog 是一个指针,存储的是对象的地址,就像,我们读书时学的知识,如果一开始的知识都从老师那里学的,如果你从文科换成理科,文科将会都丢弃,但理科水平会逐步升高
public class PassByValueExample { public static void main(String[] args) { Dog dog = new Dog("A"); System.out.println(dog.getObjectAddress()); // Dog@4554617c func(dog); System.out.println(dog.getObjectAddress()); // Dog@4554617c System.out.println(dog.getName()); // A } private static void func(Dog dog) { System.out.println(dog.getObjectAddress()); // Dog@4554617c dog = new Dog("B"); System.out.println(dog.getObjectAddress()); // Dog@74a14482 System.out.println(dog.getName()); // B } }
-
float 与 double
- float f = 10是对的,float f = 10.0是错的,因为10.0属于double
- 涉及到一个概念,向下转型
- 把子类对象直接赋给父类引用叫upcasting向上转型,向上转型不用强制转型。
-
Father f = new Son();//这样没有问题 Son s = new Father();//这样不行
-
隐式类型转换
- 简单来说就是做了转换但你不知道,例如S2那里,S1+1b不行,因为S1是Short,1是int,运算后是int(int比short的精度要高),而运算符,会帮你做一步(s2 =
s2 = (short)(s1 +1);)
- 简单来说就是做了转换但你不知道,例如S2那里,S1+1b不行,因为S1是Short,1是int,运算后是int(int比short的精度要高),而运算符,会帮你做一步(s2 =
- CSDN 技术博客 3 篇
- 习的 vlog 视频 1 个