欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java知识点集合01--String、StringBuffer、StringBuilder区别&&==和equals区别&&封装类&装箱和拆箱

程序员文章站 2022-02-11 06:28:12
...

跨平台原理

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)

  1. 安装JDK,配置JAVA_HOME变量
  2. 安装Eclipse,设置workspace的默认编码
  3. 安装Tomcat
  4. 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是线程不安全,效率较高

拼接字符串

  1. String c = “a” + “b”;
  2. StringBuilder sb = new StringBuilder();sb.append(“a”).append(“b”);
相关标签: Java