类与对象(二)
将对象用作参数
任何数据类型其实都可以作为参数传递给方法;
如果是引用类型的变量作为参数传递,就是对象传递(本质是对象的地址传递)
参数的引用传递
方法调用时传参,本质上都是将实参的副本值取出来,传给形参
如果是基本数据类型,如:
int a = 10;
method1(a);
//调用mathod1(a)方法时,就是取出形参a的副本值10传给方法,即method1(10);
如果是引用数据类型,如:
Demo dm = new Demo();
method2(dm);
//调用method2(dm)方法时,就是取出形参dm的副本值地址值传递给方法,形参就接收这个值
不同的是:
引用类型传值传的是地址,实参变量和形参变量的值都是相同的地址值,指向同一个对象
如果使用形参改变了所指对象的属性的内容的话,那么实参所指的属性内容也随之改变,因为他们都指向同一个对象
包装类
基本类型 | 包装类 |
---|---|
int | Integer |
short | Short |
long | Long |
char | Character |
double | Double |
float | Float |
boolean | Boolean |
byte | Byte |
装箱操作
将基本数据类型变成包装类,叫装箱,即包装类的构造方法
拆箱操作
将包装类变成基本数据类型,叫拆箱,即各个类的valueOf()方法
整数的缓存
- 适用的空间为-128 ~ 127
- 使用构造器创建的Integer对象不能被缓存
String类
字符串是一系列的字符组成的序列
字符串与字符数组相关的方法有:
public String(char[] value)
public String(char[] value int offset, int count)
示例:
char[] charArray = {'a','b','c'};
String str = new String(charArray,1,2);
public char charAt(int index)
示例:
String str = "helloWorld";
char c = str.charAt(5);
public char[] toCharArray()
示例:
String str = "helloWorld";
char[] charArray = str.toCharArray();
声明字符串:
String s = "Hello World";
String ss = new String("Hello World");
字符串的长度:
string.length()
字符串的内容比较:
str.equals(str1)
str.equalsIgnoreCase(str1)
str.toUpperCase()
str.toLowerCase()
字符串的连接:
在拼接时会将其他被拼接的类型自动转换为字符串类型
str.concat(str1);
字符串的提取和查询:
public int indexOf(int ch | String value):根据某字符或字符串查找其第一次出现位置(索引)
如:
String str = "HelloWorld";
int index = str.indexOf("W");
public int indexLastOf(int ch | String value):根据某字符或字符串查找其最后一次出现位置(索引)
public String substring(int index):根据指定索引截取子字符串
如:
String str = "Hello World";
String substr = str.substring(6);//World
String subStr = str.substring(str.indexOf("W"));//World
public String substring(int index, int endIndex):根据指定索引及结束索引截取子字符串
如:
String str = "Hello World";
String substr = str.substring(0,5);//Hello
String subStr = str.substring(str.indexOf("H"), 5);//Hello
public String trim():去掉字符串的前后空格
如:
String str = " Hello World ";
str.trim();//Hello World
字符串的分割:
str.split();
StringBuffer和StringBuilder
使用“+”作字符串拼接时,会产生新的字符串对象,若进行大量的字符串拼接,效率极低
若使用StringBuffer或StringBuilder进行字符串拼接时,不会产生新的对象,使用他们进行大量字符串拼接时,效率极高
(多线程使用)StringBuffer是线程安全的(可以同步访问)- 有性能损耗
(单线程使用)StringBuilder是线程非安全的(不能同步访问)