一.Thread
先来说Thread,Thread类是用来开启线程的类,自身的run()包含的是方法执行体,start()是方法执行的入口
这是Thread类中run()的源码:
@Override
public void run(){
if (target != null){
target.run();
}
}
自己创建线程有两种方式,一种是自己创建线程类继承Thread类,一种是通过实现Runnable接口来创建线程,两种都要重写run()。
下面举一个例子:
public class demo_Thread {
public static void main(String[] args) {
new Thread(new MyRunnable()).start();
}
}
class MyThread extends Thread{
public MyThread(MyRunnable myRunnable) {
super(myRunnable);
}
@Override
public void run() {
System.out.println("My Thread.");
}
}
class MyRunnable implements Runnable{
@Override
public void run() {
System.out.println("My Runnable.");
}
}
程序执行的结果为:My Runnable.
public class demo_Thread {
public static void main(String[] args) {
new MyThread(new MyRunnable()).start();
}
}
class MyThread extends Thread{
public MyThread(MyRunnable myRunnable) {
super(myRunnable);
}
@Override
public void run() {
System.out.println("My Thread.");
}
}
class MyRunnable implements Runnable{
@Override
public void run() {
System.out.println("My Runnable.");
}
}
程序执行的结果为My Thread.
二.String
String有一个字符串常量池,但是这个常量池里的量只在引用赋值的时候使用,而String做“+”拼接时,会调用StringBuilder,new一个StringBuilder对象,再将拼接符两边的字符串用append()拼接,生成的StringBuilder再调用toString()方法返回String类型变量,与在常量池中的字符串不是同一个对象(就算字符串的值相同),注意:==比的是真实地地址值,equals比的是具体数值。
这是Object类equals源码:
public boolean equals(Object obj) {
return (this == obj);
}
这是String类equals源码:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
下面举个例子:
public class test_String {
public static void main(String[] args) {
String a = "ab";
String b = "c";
String c = a + b;
String e = a + b;
String d = "abc";
String f = "ab" + "";
System.out.println(c.equals(d));
System.out.println(c==d);
System.out.println(e==c);
System.out.println(a==f);
}
}
程序运行结果:
true
false
false
true