数据类型、内存模型、集合

Java数据类型:

一、基本类型:

byte 1  对应包装类 Byte      每个首字母大写

short 2

int 4       Integer

long 8

float 4

double  8

Boolean 1

char 2        Character

用于类中的属性用包装类,基本的计算用基本数据类型

二、引用类型:

数组、类和接口

为什么有数据类型?不同的数据类型可以减少内存的使用。

内存模型

堆--以new关键词创建的对象,jdk1.7后字符串常量池也移到堆区

栈--栈帧 每调用方法都产生一个栈帧入栈 栈帧中保存该方法的临时变量,调用完后出栈

方法区--静态成员类信息1.7以前,字符串常量池

(传基本类型:调用完method方法后栈帧就出栈)

(传引用类型:new在堆区里,栈区存的是堆区的地址)

三、栈帧里面到底是什么

关于i++【先压栈,再自加】,++i【先自加,再压栈】

所有的传值都是通过操作数栈完成的

四、String的底层

string底层是char数组

string a=127;//128

string b=127;//128

system.out.prinln(a==b);

127输出true,128输出false,因为缓冲区是-128至127

字符串常量池

string a=‘abc’;

string b='abc';

system.out.prinln(a==b);

先到字符串常量池中找有没有abc,有直接引用,没有则常见一个内存空间

所以比较字符串安全的做法:a.equals(b)--看源码

拼接字符串--别用+!!!

字符串常量池不会被垃圾回收,所以那两个没用的字符串一直在,多占内存啊

所以用----StringBuffer

---StringBuilder

builder.append(‘a’)

区别:一个线程安全一个不是

并发产生原因,软件弥补硬件的不足,CPU的摩尔定律失效

CPU线程数,CPU支持的线程数越多,调度越多,性能越好

读内存数据速度跟不上CPU的速度所以就会产生线程的问题

数组---冒泡排序、选择排序   在堆区中创建一个连续的内存空间,是引用类型

数组的缺点:一旦定义长度不变

List

   ArrayList,底层是数组,看源码可知每次扩容是原来的1.5倍--读取快,下标直接读,尾部添加两者一样

   LinkedList 很少用 底层是链表--读取慢,从中间插入,这个比ArrayList高

Set

    HashSet:重复内容添加不进去,按照自然排序的---去重,不能直接拿值

Map

    HashMap:通过key,有个hash算法,拿到key就知道下标了,如果出现相同的下标,就扩建成链表  数组+链表

类和对象

分层  

      dao----------持久层(一般是数据库)

      service-----服务层(主要写事物,)

      web(controller)---------控制层

      底层给上层提供服务,注入用接口

    内部存储硬盘读写速度慢,所以发明了内存,慢慢发展成缓存,缓存存进程(正在运行的东西)运行的东西全在内存,

    持久化:内存中的运行数据存在硬盘,一般在C盘中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值