引用数据类型:类,接口,数组
装箱是将基本数据类型转换为包装器类型;拆箱是将包装器类型转换为基本数据类型。
Integer i = 8; //装箱
int n = i; //拆箱
public class Main {
public static void main(String[] args) {
Double i1 = 100.0;
Double i2 = 100.0;
Double i3 = 200.0;
Double i4 = 200.0;
System.out.println(i1==i2); //ture
System.out.println(i3==i4); //false
}
}
注:范围在-128到127会返回内存中存在的引用,超过127就会采用new一个对象,所以上面的==其实就是比较内存地址,而不是比较数值大小。
String类的操作
public class ForTest {
public static void main(String args[]){
String s1 = "Hello world";
String s2 = "Hello java";
if(s1.equals(s2)){
System.out.println("equal");
}
if(s1.startsWith("He")){
System.out.println("begin with He");
}
if(s1.endsWith("world")){
System.out.println("end with World");
}
System.out.println("s1 中字母d的索引为: "+ s1.indexOf('d'));
System.out.println("索引从3到8的子字符串: "+ s1.substring(3,8));
System.out.println("拼接到后面: "+ s1.concat("abcd"));
System.out.println("替换单个字母: "+ s1.replace('H','z'));
System.out.println("替换第一个字母: "+ s2.replaceFirst("H","AABB"));
System.out.println("是否包含world: "+ s1.contains("world"));
System.out.println("根据空格切割: "+ s1.split(" "));
}
}
StringBuilder和StringBuffer的区别?
StringBuffer是线程安全的,而StringBuilder不是,如果不考虑线程安全,尽量用StringBuilder来修改字符串。
Array类 和 Arrays类
import java.lang.reflect.Array;
import java.util.Arrays;
public class ArraysDemo {
public static void main(String args[]){
int[] a = {40, 20, 50, 10, 60, 30};
int b = Array.getInt(a, 2);
Array.set(a,2,80);
System.out.println(Arrays.toString(a));
Arrays.sort(a);
//排序(从大到小),前提是利用前面已经排好的数组
int len = a.length;
for(int i=0; i<len/2; i++){
int temp = a[i];
a[i] = a[len-1-i];
a[len-1-i] = temp;
}
System.out.println("逆序后:"+Arrays.toString(a));
//比较两个数组是否相等
int[] c = {10, 20 , 30 , 50 , 70};
System.out.println(Arrays.equals(a, c));
}
}
数组拷贝
1.直接赋值:int a = 10, int b=a; 这个时候,a和b是完全相等,内存地址相同,内容相同, 修改a即修改b. 例如:
public class ArraysDemo {
public static void main(String args[]){
int[] a = {40, 20, 50, 10, 60, 30};
int[] b = a;
System.out.println(a == b); //ture
Array.set(a,2,100);
System.out.println("a "+Arrays.toString(a)); //a [40,20,100,10,60,30]
System.out.println("b "+Arrays.toString(b)); //b [40,20,100,10,60,30]
}
}
2. clone()方法, ab两者独立,不互相影响
public class ArraysDemo {
public static void main(String args[]){
int[] a = {40, 20, 50, 10, 60, 30};
int[] b = a.clone();
System.out.println(a == b); //false
Array.set(a,2,100);
System.out.println("a "+Arrays.toString(a)); //a [40,20,100,10,60,30]
System.out.println("b "+Arrays.toString(b)); //b [40, 20, 50, 10, 60, 30]
}
}
3. 浅拷贝 System.arraycopy(a,index,b,index,length)
ab两者独立,不互相影响
public class Test3 {
public static void main(String[] args) {
String[] a = { "Beijing", "ShangHai", "HeBei", "GuangZhou", "XiAn" };
String[] b = new String[a.length];
System.arraycopy(a, 0, b, 0, a.length);
System.out.println(a == b); //false
Array.set(a, 2, "WuHan");
System.out.println("a " + Arrays.toString(a));
System.out.println("b " + Arrays.toString(b));
}
}
4. 浅拷贝 Arrays.copyOf(a,length) ab两者独立,不互相影响
public class ArraysDemo {
public static void main(String args[]){
String[] a = {"Beijing", "ShangHai", "HeBei", "GuangZhou", "XiAn"};
String[] b = Arrays.copyOf(a, a.length);
System.out.println(a == b);
Array.set(a,2,"WuHan");
System.out.println("a "+Arrays.toString(a));
System.out.println("b "+Arrays.toString(b));
}
}