发表于: 2017-07-02 23:18:23

1 1182


一、今天做的事情:

代码生成测试。

test没有成功。继续观察代码,查看动态语句

放歌String的源码解析把- -

例子

1
2
3
4
5
6
7
8
9
10
11
public class readString{
public static void main(String[] args){
String a1="1000";
String a2="1000";
String a3=new String("1000");
String a4=new String("1000");
System.out.println(a1.equals(a2));
System.out.println(a3.equals(a4));
System.out.println(a3==a4);
}
}

大家觉得结果是什么呢?

答案就是

test

不知道在看答案的你是不是答对了呢

原理

其实这个要讲起来又是涉及到==和equals的区别。我的理解是,==是比较两个类的应邀地址是不是指向了同一个地方。而equals是基于定义的equals方法来具体实现的。举个栗子:

String的equals方法:

test2

这里我们就可以知道:

1.String的equals是先判断是不是同一个对象,如果是就返回true.

2.然后判断a3对象是不是String类,然后定义a4赋值为a3

3.初始化n用来记录值的a3的长度。

4.如果a4的长度等于n

5.定义一个数组存储a3.v2存储a4的长度

6.比较两个数组的值是不是相等,不等返回false,相等返回true

这里我们就可以知道了a3 equal a4的。

而当String一个对象””时,JVM是先根据””里面的值去字符串池里面找,如果没有就创建一个,如果有就引用,所以这里面的过程大致是(JVM没这么简单,粗糙粗糙….)

test3

所以a1等于a2,a3==a4为false,是因为它们开辟了新的内存,指向地址不同,所以为false.

所以String类原来是这样的呀

二、遇到的问题:无

三、明天计划的事情:方案评审通过

四、收获:其实这几天感觉自己很焦虑,不知道为什么。


返回列表 返回列表
评论

    分享到