java基础
程序员的程序媛
这个作者很懒,什么都没留下…
展开
-
Java对象的创建过程
1.类加载检查:虚拟机遇到一条new指令时,首先先去检查这个指令的参数是否能够在常量池中定位到这个符号的引用,并且检查这个符号引用的代表类是否被加载过、解析过和初始化过。如果没有,那必须先执行相应的类加载过程。2.分配内存:在类加载检查通过后,接下来虚拟将为新生对象分配内存。对象所需的内存大小在类加载完成后便可确定,为对象分配空间的任务等同于把一块确定大小的内存从java堆中划分出来。分配方式...原创 2020-06-19 08:48:49 · 213 阅读 · 1 评论 -
ConcurrentHashMap 和 Hashtable 的区别
ConcurrentHashMap 和 Hashtable 的区别 主要体现在实现线程安全的方式上不同。1.底层数据结构:JDK1.7的ConcurrentHashMap 底层采用的是分段的数组和链表实现,JDK1.8之后数据 +链表/红黑二叉数。Hashtable 底层采用的是数据+链表,数组是HashMap的主体,链表则是为了解决哈希冲突而存在的;2.实现线程的安全方式:在JDK1....原创 2020-04-02 16:53:30 · 1817 阅读 · 0 评论 -
ArrayList 和 Vector 的区别?为什么要用Arraylist代替Vector?
Vector 类中所有的方法都是同步的,可以由两个线程安全的访问同一个Vector对象,但是一个线程访问Vector 的话就会在同步操作上耗费大量的时间。ArrayList 不是同步的,所有在不需要保证线程安全时建议使用ArrayList 。...原创 2020-04-02 09:40:15 · 1483 阅读 · 0 评论 -
hashCode 和 equals区别和联系
面试官可能会问你”你重写过hashcode 和 equals 么?为什么重写 equals 的时候必须重写hashCode方法 ?以“HashSet 如何检查重复”为例子来说明为什么要有 hashCode:当你把对象加入 HashSet 时,HashSet 会先计算对象的 hashcode 值来判断对象加入的位置,同时也会与其他已经加入的对象的 hashcode 值作比较,如果没有相符的 ha...原创 2020-04-01 20:11:38 · 298 阅读 · 0 评论 -
String StringBuffer和 StringBuilder 的区别?String 为什么是不可变的
1.可变性String类中使用final关键字修饰字符数组来保护字符串,所以是String对象是不可变的。StringBuffer 和 StringBuilder 没有使用final修饰,所以是可变的。2.线程安全性String 对象是不可变的,可以理解为常量,所以是线程安全的StringBuffer 对方法加了同步锁,或对调用的方法加了同步锁,所以是线程安全的。StringBui...原创 2020-04-01 16:55:38 · 247 阅读 · 0 评论 -
JAVA BigDecimal使用中遇到的问题
BigDecimal使用中遇到的问题,后来在网上找了解决方案,完美解决,记录下BigDecimal sumAmount = new BigDecimal(0); sumAmount.add(new BigDecimal(5000)); System.out.println(sumAmount);输出结果为0。查资料后才知道,要这样写才行: BigDecimal sumAmoun...原创 2019-07-23 20:29:42 · 1061 阅读 · 0 评论