一、Object类
1. Object:位于 java.lang包中,是所有类的父类(直接父类或是间接父类)
(1) Object类型的引用可以 存储任意类型的对象,体现多态的应用
(2) Object中定义的方法,所有类都可以使用(访问权限允许)
2. 常见的方法:
(1) getClass():返回引用中实际存储的对象类型
(2) int hashCode():返回哈希码值
注意:不同的对象返回不同的哈希码值
(3) boolean equals(Object obj):判断两个对象的内容是否相等,相等-true;不等-false
(4) String toString():返回对象的字符串形式
二、包装类
1. 包装类:基本数据类型对应的类成为包装类(位于java.lang包中)
2. 基本数据类型对应的包装类:
基本数据类型 包装类型
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean
3. 数据类型之间的转换
// 基本数据类型 -》 包装类型
int a = 36;
Integer i2 = new Integer(a);
System.out.println(i2);
Integer i3=Integer.valueOf(a);
System.out.println(i3);
/* public static Integer valueOf(int i) {
if (i >= -128 && i <= 127)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
} * */
// 包装类型 -> 基本数据类型
int n = i2.intValue();
System.out.println(n);
// int -> String
int a2 = 89;
String str1 = a2+"";
System.out.println(str1);
System.out.println(a2+1); // 90
System.out.println(str1+1); // 891
// String -> int
int n3 = Integer.parseInt("87a");
System.out.println(n3);
注意:String 转换为 int类型,转换的String需要为纯数字内容,否则运行时报错,错误信息为:
java.lang.NumberFormatException(数字格式转换异常)
4. 自动装箱和自动拆箱:基本数据类型和包装类型之间可以直接相互转换的
5. 包装类通常可以区分有效数据和无效数据,例如:0和null
三、String类
1. 获取字符串的方式
(1) String str1 = "hello";
这种获取字符串的方式,在串池中完成字符串对象的创建,有-不再创建
(2) String str2 = new String("world");
这种获取字符串的方式,先在堆空间中创建一个字符串对象,再查看字符串串池中是否存在该对象,存在-无需创
建,不存在-再次创建
2. 常见的方法:
String str = "Hello";
// 根据下标获取对应字符
// 指定合理的下标范围,否则:java.lang.StringIndexOutOfBoundsException
char c = str.charAt(2);
System.out.println(c);
System.out.println(str.length());
// 遍历字符串
for(int i=0;i<str.length();i++){
System.out.println(str.charAt(i));
}
System.out.println(str.indexOf("elle"));// 获取字符在当前字符串出现的第一个字符下标,
没有,返回-1
System.out.println(str.contains("ell"));//判断指定字符串是否在当前字符串中存在
System.out.println(str.toLowerCase()); // 大写- >小写
System.out.println(str.toUpperCase()); // 小写-》大写
System.out.println(str.startsWith("he"));// 判断是否以xx开头
System.out.println(str.endsWith("o"));// 判断是否以xx结尾
String str2 = " he llo";
System.out.println(str2);
System.out.println(str2.trim()); // 去除前后空格
String str1 = new String("Hello");
String str2 = new String("hello");
System.out.println(str1 == str2);
System.out.println(str1.equals(str2));// 判断字符串内容
System.out.println(str1.equalsIgnoreCase(str2));// 判断字符串内容,忽略大小写
String str = "hello-world-java";
String[] strs = str.split("-");
for(int i=0;i<strs.length;i++){
System.out.println(strs[i]);
}
String str3 = "he89weHfyfs9gguFYFYFY";
// 统计以上字符串中大写字母的个数,并打印输出
int count = 0;
for(int i=0;i<str3.length();i++){
char c = str3.charAt(i);
if(c >='A' && c<='Z'){
count++;
}
}
System.out.println(count);
3. 不可变性:String字符串是常量,创建之后不可改变;字符串字面值存储在串池中,可以共享
4. 可变长的字符串:
StringBuffer:可变长字符串,JDK1.0,线程安全,运行效率慢。
StringBuilder:可变长字符串,JDK5.0,线程不安全,运行效率快。