Java知识点集合01--String、StringBuffer、StringBuilder区别&&==和equals区别&&封装类&装箱和拆箱
跨平台原理
JVM(Java Virtual Machine )Java虚拟机
JDK(Java Development Kit)Java开发工具包,JDK包含JRE,Javac编译器、还包含调试和分析工具、文档和demo例子程序。
JRE(Java Runtime Environment)Java运行时环境。包括Java基础类库、JVM
将源代码通过javac编译器编译成.二进制class字节码文件,在JVM上解释器解释成不同的机器码。不同的指令集。
跨平台:在不同的机器上安装不同的JVM,生成一样的.class字节码文件。(提供了统一的接口,开发者调用这些接口)
Java的开发环境
JDK、开发软件eclipse、web服务器(tomcat)
- 安装JDK,配置JAVA_HOME变量
- 安装Eclipse,设置workspace的默认编码
- 安装Tomcat
- SVM/Git
Int数据占几个字节
基本数据类型:byte(8),short(16),int(32),long(64),double(64),float(32),char(16),boolean(1)
int占4个字节,32位
boolean | false |
---|---|
char | ‘/uoooo’(null) |
byte | (byte)0 |
short | (short)0 |
int | 0 |
long | 0L |
float | 0.0f |
double | 0.0d |
面向对象的特点
封装、抽象、继承、多态
封装:将对象分装成一个高度自治和相对封闭的个体。通过get/set方法来改变属性
抽象:将事物抽象为一个类
继承:继承原先的类,可以在子类中添加修改方法。
多态:程序运行时动态绑定,引用变量指向实例对象
封装类&装箱和拆箱
boolean—>Boolean
int—>Integer
double—>Double
float—>Float
char---->Character
short—>Short
long—>Long
byte—>Byte
- 自动装箱:把基本数据类型转换成封装类,编译调用valueOf
- 手动装箱:调用Integer.valueOf(1)
- 自动拆箱:把封装类转换成基本数据类型,编译调用XXXValue()
Integer i = Integer.valueOf(1);
int x = i;//自动拆箱,int x = i.intValue();手动拆箱
自动装箱的缓存问题:超出缓存范围[-128,127],从堆内存中饭new一个新的对象返回。Integer缓存范围可以设置。(java.lang.Integer.IntegerCache.high=10000)
- Boolean就两个缓存值TRUE,FALSE
- Byte占1个字节,表示范围是[-128,127], 因为范围不大,所以全部256个值都是缓存的
- Short, Long缓存范围是[-128,127],而且不可更改. 也无法通过extends方式扩展,因为这两个类是final的
- Float,Double没有缓存,每次valueOf(1.0)都是返回一个堆中的新对象
封装类可判断是否为空。
==和equals区别
基本数据类型直接比较值,引用类型比较引用内存的首地址。
==比较对象的引用地址(栈中的内容)。equals比较堆中内容是否相同,调用对象的equals方法
Integer b1 =new Integer (1);
Integer b2 =new Integer (1);
b1==b2 //false
bi.equals(b2) == true //true
String s1 = "Monday";
String s2 = "Monday";
s1==s1 //true,因为s1,s2的值均存放在常量池中,s1,s1在栈中存放常量池中位置相同
HashMap
通过object传入的hashcode在内存中keay地址,再通过equals判断内容是否一样。
String和StringBuffer、StringBuilder区别
- String:内容不可变的字符串,因为String底层使用不可变的字符数组(final char[])。
- StringBuilder和StringBuffer内容可变, StringBuilder和StringBuffer底层使用可变的字符数组(没有使用final)。。通过append来追加,数组拷贝(Arrays.copyOf(value,newCapacity)
- StringBuilder和StringBuffer区别:StringBuffer是线程安全,效率较低,StringBuilder是线程不安全,效率较高
拼接字符串
- String c = “a” + “b”;
- StringBuilder sb = new StringBuilder();sb.append(“a”).append(“b”);