基础知识
数据类型
1、基本数据类型
在栈区直接存储数据
byte/short/int/long/double/float/char/boolean
整数类型*4/浮点类型*2/字符/布尔值
这八种数据类型有对应的封装类型
Byte/Short/Integer/Long/Double/Float/Charactor/Boolean
基础数据类型初始值(跟引用类型比较):
byte/short/int:0
long:0L
double:0.0
float:0.0f
char:'\u0000'
boolean:false
在基础数据类型和引用类型互相转换的过程叫做自动装箱/拆箱
Integer integer=100;//实际上编译器会自动将其转化为下面这句:
Integer integer=Integer.valueOf(100);
int i=integer;//这一句实际上将integer对象进行了拆箱
int i=integer.intValue();
使用”=”赋值(此处与引用数据类型的区别)
int i1=100;
int i2=i1;
i1=200;
i1==i2;//false
将i1的值拷贝一份给i2
如果是数组的话
int[] arr1=new int[]{1,2,3};
int[] arr2=arr1;
此时两个数组指向的是同一个地址
2、引用数据类型
在栈区存储引用的地址,指向堆区的特殊空间
是一个对象
对于Integer对象来说:
当数值处于-128~127时,不会创建新的对象
建议使用equals()方法来判断内容是否相等(而不是“==”)
一般会重写类的equals()方法,若没有重写就会默认调用Object类的,相当于”==”
“==”会比较两边的引用地址
常见的String类型的比较:
1、String重写了equals()方法,会直接比较对象的字符串内容。(Integer等封装类也是)
String s1="string";
String s2=new String("string");
s1.equals(s2);//true
下面不考虑equals()情况
2、如果使用new String(“内容”)的话,会创建一个新的对象,即使内容相同,”==”也会判断为不等
String s1="string";
String s2=new String("string");
s1==s2;//false
3、即使是使用”+”将字符串连接起来也一样
String s1="str"+"ing";
String s2="string";
4、但是使用对象+”字符串”就相当于创建新的对象
String s1="string";
String s2=new String("str")+"ing";
s1==s2;//false
将引用指向另外的地址:
以下代码仅仅是把p2的引用指向了p1的实例
Person p1=new Person();
Person p2=p1;
注意此处与基本数据类型的区别
修改一个会影响另外一个
String的初始化以及基本数据类型的初始化:
使用String s和使用String s=null不同
前者未初始化,不能使用,后者为空,可以使用…而加上static之后就默认为null
引用类型的对象没有初始化就不能用(即使你把他初始化为空也是不一样的)