1、引用数据类型
1、应用场景:属性 参数 返回值类型
2、赋值:引用类型都是对象,所以赋值都使用new调用构造方法进行赋值; 例外:String类和包装器类可以直接使用=赋值,一般不使用new
2、基本数据类型和引用数据类型的区别
1、概念 变量(单纯的值) 对象(引用)
2、存储位置 在栈中存值 在栈中存引用,在堆中存具体对象的属性值
3、赋值方式 直接赋值 new ,String类和包装器类可以直接赋值
3、赋值
1、基本数据类型之间赋值,是将值进行拷贝,是两块互不影响的空间
2、引用类型之间赋值,是虚地址之间的赋值 eg:t1 = t2 就是把t2的虚地址赋值给t1,所以t1和t2指向同一块内存
4、==运算
1、在判断引用数据类型时判断的是地址,即虚地址一样才返回true
2、在判断基本数据类型时判断的是数值,即二进制一样才返回true eg:0.3f==0.3 false 0.5f==0.5 true
5、String类
1、创建对象的两种方式: 1、String str = "abc" 2、使用构造方法赋值:eg:String str2 = new String("abc") char[] ary = {'a','b'} String str3 = new String(ary)
2、两种创建方式的区别
1、使用构造方法,每次生成一个新的字符串
2、直接=赋值,从字符串常量池中取值
3、String str1 = new String(“abc”)一共创建了几个对象?2个对象
String str2 = “abc”;--- 在常量池一个对象
String str3 = new String(str); --- 堆内存里一个对象 String
str = new String(“a”+“b”)一共创建了几个对象?4个对象
String str = “a” String str = “b” String str = “ab” str是一个对象
3、获取字符串长度:int length()
4、equals方法:比较两个字符串的内容是否相等(String类重写了object类里面的equals方法)
5、常用方法
String s1 = "etc";
System.out.println(s1.equalsIgnoreCase("ETC")); //判断参数字符串是否与当前字符串相等,忽略大小写形式
//s1位于参数字符串之前,则比较结果为一个负整数。s1位于参数字符串之后,则比较结果为一个正整数。如果这两个字符串相等,则结果为 0
System.out.println(s1.compareTo("f")); //根据unicode码(字典)比较字符串参数和当前字符串的大小
System.out.println(s1.startsWith("s"));//判断当前字符串是否以参数为开头
System.out.println(s1.indexOf("c")); //根据字符串查找它的索引
System.out.println(s1.indexOf(99)); //搜索字符ch(unicode)在当前字符串中第一次出现的索引,没有出现则返回-1
String s2 = "et@ce";
System.out.println(s2.indexOf("@")); //2
System.out.println(s2.lastIndexOf("e")); //4 //找到最后一个参数字符索引的位置
char ch = s2.charAt(2); //用于从指定位置提取单个字符,该位置由index指定,索引值必须为非负
System.out.println(ch);
String cardNo = "1289";
String a = cardNo.substring(0,1); //用于提取 两个参数位置之间的字符串部分
String b = cardNo.substring(1,2);
String c = cardNo.substring(2,3);
String d = cardNo.substring(3,4);
System.out.println(Integer.parseInt(a)+Integer.parseInt(b)+Integer.parseInt(c)+Integer.parseInt(d));
System.out.println(cardNo.substring(1)); //截取从参数开始到最后一个字符
System.out.println(" abc ".trim()); //去掉字符串前后的空格
System.out.println(cardNo.concat(s1));//用于连接两个字符串,并新建一个包含调用字符串的字符串对象
System.out.println(cardNo.replace("1", "a")); //用于将调用字符串中出现oldChar指定的字符全部都替换为newChar指定的字符
//Strig类型的不可变性
String s3 = new String("icss");
s3 = s3.toUpperCase();//返回的全是大写字母
System.out.println(s3);
//返回当前字符串转化成byte型数组的形式(即字符串在内存中保存的最原始的二进制形态)
byte[] ary1 = s3.getBytes();
for (byte e : ary1) {
System.out.println(e);
}
//返回当前字符串的字符数组形式
char[] ary2 = s3.toCharArray();
for (char e : ary2) {
System.out.println(e);
}
6、StringBuffer与StringBuilder
1、StringBuffer类用于表示可以修改的字符串,称为字符串缓冲对象
2、StringBuffer与StringBuilder它们虽然也是字符串,但是它们却不能够直接赋值,必须用new来创建。
3、String 和StringBuff StringBuilder区别?
(1)赋值 String可以用等号赋值也可以用构造方法赋值 StringBuff和StringBuilder只能用new
(2)String是不可变的,stringBuffer和StringBuilder是可变的
(3) StringBuffer StringBuilder
线程是否安全 安全 不安全
效率 相对低 相对高
4、常用方法
StringBuffer sbf = new StringBuffer("abc");
System.out.println(sbf.append("cdf")); //连接
System.out.println(sbf.reverse()); //倒序
sbf.insert(5, "Student"); //插入
System.out.println(sbf);
sbf.setCharAt(4, '.'); //替换字符
System.out.println(sbf);
7、包装器类型
1、在java.lang包下
2、每一种基本数据类型都对应一种包装器类型
基本数据类型 包 装 类
boolean(布尔型) Boolean
byte(字节型) Byte
char(字符型) Character
short(短整型) Short
int(整型) Integer
long(长整型) Long
float(浮点型) Float
double(双精度浮点型) Double
3、valueOf方法,用于将字符串转换成相应包装类的对象。
eg:Integer integer = Integer.valueOf(str);
4、静态的parseXxx方法(Xxx指代具体的数据类型),用于将字符串转换成相对应的基本数据类型值。
eg:double d = Double.parseDouble(str);
5、自动封解箱操作
int x = 10;
Integer y = x;//装箱操作
int z = y; //拆箱操作
6、Character类中的常用方法
boolean isLetter(char ch) 判断字符ch是否为英文字母
boolean isDigit(char ch) 判断字符ch是否为0~9之间的数字
boolean isUpperCase(char ch) 判断字符ch是否为大写形式
boolean isLowerCase(char ch) 判断字符ch是否为小写形式
boolean isWhitespace(char ch) 判断字符ch是否为空格或换行符
8、值传递
值传递的本质是赋值,是把实际参数赋值给形式参数的过程
1、基本数据类型是值之间进行赋值
2、引用数据类型虚拟地址之间进行赋值
值传递
1、基本数据类型在传递过程中形参改变实参不改变
2、引用类型在传递过程中形参改变实参也改变。
3、虽然String 、包装器类本身是引用数据类型,但是按基本数据类型的规则传递。