Object类是所有类的终极父类。 任何一个类都继承了Object类。sun提供了很多类。
我们利用javap来反编译一下类文件:
public class Demo79{
public static void main(String[] args){
System.out.println("i love you");
System.out.println(new People79().toString());
}
}
class People79{
}
上面就是源文件,其中调用一个toString()方法打印对象的一些信息。但是这个toString方法,People79本身也没有写上这个方法,我们来检测一下这个方法到出自哪里
上面很明显就是调用了object的toSting()方法,从侧面印证了,我们所有的类都继承了object类
下面说object中三个常用的方法:
下面是让线程进行等待的方法,根据参数不同进行重载
打印对象的哈希码值,和它相应的包的位置
上面两个信息打印出来的都一样。
我们就去看那一下println的源代码:
注意是打印对象的哪一个源代码
里面又调用了一个print函数:
上面就是内部也调用了一下toString()方法
上面这个toString()我们可以重写,按照我们想要的方式进行重写
equals(Object obj) 用于比较两个对象的内存地址,判断两个对象是否为同一个对象。
传入者对象与调用者对象比较
最基本的equals就是比较两个对象内存地址
一般重写hashCode()就要重写equals
下面说一下字符串:
上面很明显java的字符串也是自动导包的
两种方式创建字符串:
String str1 = "hello";
String str2 = "hello";
String str3 = new String("hello");
String str4 = new String("hello");
System.out.println("str1==str2?"+(str1==str2)); // true
System.out.println("str2==str3?"+(str2==str3)); //false
System.out.println("str3==str4?"+(str3==str4)); // false
System.out.println("str3.equals(str2)?"+(str3.equals(str4))); //true
这个情况String类可能重写了equals方法,查看源代码:
上面很明显比较是两个字符串的内容
在String中的代码:
==用作比较对象,一般是比较两个对象的内存地址:
上面就是字符串重写了equlas方法,字符串比较的是内容,只要内容是一样的,就返回trrue
下面说一下字符串在内存里面是如何创建的:
new的方式就是在对上面开辟一个对象,把常量池中的内容给拷贝进来。
String 字符串类:
笔试题目:new String("abc")创建了几个对象?
两个对象, 一个对象是 位于字符串常量池中,一个对象是位于堆内存中。
*/
问:整型也是比较地址?
整型比较的是数值
看一下下面代码有没有什么风险?
如果test中给一个NULL,那么就会出现空指针异常,我们把它捕获处理
字符串这个对象如果不存在去调用equals就会造成空指针异常
//修改一下代码
public static void test(String str){
if("中国".equals(str))
{
System.out.println("回答正确");
}else{
System.out.println("回答错误");
}
}
字符串本省就是一个对象,在常量池中创建一个对象
一个一个字节就是一个一个字符,按照常理来分析,字节数组,字符数组,都可以转换成字符串对象
根据构造函数来进行,字节数组,字符数组的转换---》转换成相应的字符串对象
String() 创建一个空内容 的字符串对象。
String(byte[] bytes) 使用一个字节数组构建一个字符串对象,把这里面的数据变成ASCII码输出
String(byte[] bytes, int offset, int length)
bytes : 要解码的数组
offset: 指定从数组中那个索引值开始解码。
length: 要解码多个元素。
String(char[] value) 使用一个字符数组构建一个字符串。
String(char[] value, int offset, int count) 使用一个字符数组构建一个字符串, 指定开始的索引值,与使用字符个数。
String(int[] codePoints,int offset,int count)//y与字节解码一样
String(String original)
想到字符串中的方法:
1.获取特定索引位置的字符charAt(int index)
2.获取字符串第一次出现和最后一次出现的位置indexOf(String string) and lastIndexOf(String string)
3.判断字符串长度是否为空isEmpty();长度是否为0
4.是否包含指定序列,也就是说是否包含指定字符串contains(String string)插一嘴,一般来说,判断方法返回的一般都是真假值
5.判断是否是指定的字符串结束endsWith(String str)....这个方法有点重要
6.什么字符串的截取,替换,大小写。。。
解决下面的所有习题:
- 去除字符串两边空格的函数
- 获取上传文件名 "D:\\20120512\\day12\\Demo1.java"。
- 将字符串对象中存储的字符反序。
- 求一个子串在整串中出现的次数