public class Test1 {
public static void main(String[] args) {
Integer a = 100;
Integer b = 100;
System.out.println(a==b); //true
System.out.println(a.equals(b)); //true
Integer c = 500;
Integer d = 500;
System.out.println(c==d); //false
System.out.println(c.equals(d)); //true
}
}
/**
* Integer 的封装类中,其内部开辟了一块缓存区,用于存放-128~127 的大小的数,当从外部创建的对象值(int)在此区域是,直接从缓存区中区数据的引用即可,即,a 和 b 元素都是内存将同一块的地址的引用返回;即相同的地址;当数据不在此区域时,此时类的内部实现是重新在堆上new 一块区域,此时地址肯定肯定不一样;就像c 和 d 都是分别各自new 了一块区域,此时== 肯定不一样,equal()系统的实现方法是直接是值的比较所以都是true.
*/
/*public class Test2 {
public static void main(String[] args) {
Object obj = new Object();
synchronized(Thread.currentThread())
{
obj.wait();
obj.notify();
}
}
}
/**
* 1 编辑通过不了,其的结果:
*Exception in thread “main” java.lang.Error: Unresolved compilation problem:
Unhandled exception type InterruptedException
*/
/*public class Test2 {
public static void main(String[] args) {
Object obj = new Object();
synchronized(Thread.currentThread())
{
try {
obj.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
obj.notify();
}
}*/
/*
* 2 编辑可以通过,其结果:
* Exception in thread “main” java.lang.IllegalMonitorStateException
*/
/**
*最佳方法:
* 1 wait()函数必须进行异常捕获;
* 2 调用wait()或者notify()必须采用当前锁调用,即必须采用synchronized中的对象
*/
package secondDay;
public class Test3 {
public static void main(String[] args) {
String str = new String("xyz");
System.out.println(2<<3); //16
}
}
/*
* 1 描述JVM 加载 Java 文件的过程和目的?
* 答:.java 文件先通过编译器(如eclipse)先编译成.class 文件,他是字节码文件,不是机器最终运行的机器码,程序运行的时候,虚拟机再把每一条要执行的字节码送给解释器(不同的平台,解释器的解释方式不同),解释器,将其翻译成特定的机器上的机器码。不同的平台的解释器的解释方式不相同,翻译出来的机器码也不相同,所以可以跨平台。
* 2 String s = new String(“XYZ”):创建了几个String Object?
* 答:两个。
* 3 char 型变量中能不能存储一个中文汉字,为什么?
* 答: 可以的,因为java 是一unicode编码,一个char 占16 个字节,一个汉字也是16个字节。
* 4 两个对象值相同(x.equal(y)== true),却可以有不同的hash code 对吗?
* 答: error .hash code 肯定相同
* 5 两个对象有相同的hash code ,两个对象的(x.equal(y) == true )对吗?
* 答:error。
*/
public class Test4 {
private static void testMethod()
{
System.out.println(“testMethod”);
}
public static void main(String[] args) {
((Test4)null).testMethod(); //运行正常 输出 testMethod
}
}
/**
* 注解:
* 1 此处是类对方法的调用,不是对象对方法的调用,
* 2 方法是static 静态方法, 直接使用”类.方法” 即可, 因为静态的方法使用不依赖对象是否被创建,null 可以被强制转换成任意类型(不是任意类型对象), 于是,可以通过它来执行静态方法
* 3 非静态的方法用”对象.方法”的方式, 必须依赖对象别创建后才能调用, 若将,testMethod()方法前的
* static 去掉,则会报空指针异常,此处也验证了2 的观点.
*
*/