CoreJava学习笔记05 Object类 String类 包装类
程序员文章站
2022-03-14 13:52:08
...
Java的运行时数据区
Object 类 包装类和String
Object类
所有Java类的父类
class A{} // class A extends Object
class B extends A{}
- Object类型的引用, 可以存储任意对象 Object o = XXX
- 在Object类中定义的公开,或受保护的方法, 是所有Java对象都具有的方法
方法声明 | 含义 | 典型用法 |
---|---|---|
public Class getClass() | 获得对象的实际类型 | a1.getClass() == a2.getClass() |
protected void finalize() | 对象被垃圾回收时调用 | 无需主动调用 |
public String toString() | 返回对象的字符串形式 | System.out.println(s) |
public boolean equals(Object o) | 判断两个对象内容是否相同 | o1.equals(o2) 判断o1 o2内容是否相同 |
垃圾收集 : 由垃圾收集器主动回收垃圾对象
-
如果判断对象为垃圾对象 : Hotspot 零引用算法 当对象没有任何引用指向它时, 认定为垃圾
-
垃圾对象何时被回收: 延迟回收
toString() 打印对象, 就是打印对象的toString()的返回值
对两个引用使用 == 判断 , 判断的是这两个引用是否指向同一个对象
如果要实现两个对象比较内容, 需要在类中覆盖equals方法
// this 和 obj 比较内容
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null) return false;
if (this.getClass() != obj.getClass()) return false;
Employee e = (Employee)obj;
if (this.name.equals(e.name) && this.salary ==e.salary ) return true;
else return false;
}
String
字面值 " " 字符数组
方法名 | 作用 |
---|---|
toCharArray() | 转成字符数组 |
charAt(int pos) | 获得pos下标的字符 |
toUpperCase() / toLowerCase() | 转成大写/ 小写 |
length() | 字符串长度 |
trim() | 去掉字符串前后的换行和空格 |
startsWith(String str) / endsWith(String str) | 判断字符串是否以str子串开头/结尾 |
indexOf(String str , int start) | 查找str子串的位置 |
split(String str) | 以str为分隔符, 将字符串切割为若干子串 返回String[] |
intern() | 返回对象在串池中的地址 |
String 内容不可变
好处: 多个引用可以共享同一个对象,节约内存空间
public static void main(String[] args) {
String s = "ABC";
String s2 = "ABC";
System.out.println(s == s2);
String s3 = new String("ABC");
System.out.println(s2 == s3);
s3 = s3.intern();
System.out.println(s2 == s3);
}
坏处: 当字符串累加时, 不断地产生新的字符串对象, 降低运行效率
解决办法: StringBuilder 代表字符串, 内容可变
String s = "ABC";
s += "DEF";
s += "GHI";
s += "XYZ"; //不鼓励 每次运算,都会产生新的String对象
String s = "ABC";
StringBuilder sb = new StringBuilder(s);
sb.append("DEF");
sb.append("GHI");
sb.append("XYZ");
s = sb.toString();
包装类
为8种基本类型提供对象形式 , 让Object类成为所有数据类型的父类
基本类型 | 包装类 |
---|---|
byte | Byte |
short | Short |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
int | Integer |
char | Character |
-
基本类型 --> 包装类
Integer a = Integer.valueOf(i);
-
包装类 --> 基本类型
int i = a.intValue();
自动封箱 : 由编译器自动处理包装类对象和基本类型之间的转换
-
基本类型 --> String
String s = i+"";
-
String --> 基本类型 (重要)
i = Integer.parseInt(s);
-
包装类 --> String
s = a.toString();
-
String --> 包装类
a = Integer.valueOf(s);
下一篇: Vue学习笔记(一)
推荐阅读
-
3.2常用类(java学习笔记)String与StringBuffer
-
iOS学习笔记-137.RunLoop05——Runloop相关类3_CFRunLoopTimerRef(NSTimer)为何定时有时会失败
-
C++ 学习笔记(三)string 类
-
Java实用包学习笔记(1)—— String、StringBuffer、StringBuilder类
-
Java从入门到精通_学习笔记09(包装类)
-
3.1常用类(java学习笔记)包装类及日期类
-
java常用类的使用、String类、StringBuffer类、正则表达式、基本数据类型的包装类、Object类、Math类
-
Java学习笔记(5)--- Number类和Math 类,String类的应用,Java数组入门
-
Java的String类、Object类、包装类
-
java三大特殊类:String,Object,包装类