* @author 12091
*
*/
//java虚拟机的体系结构 :堆(heap) 、方法区(method Area)、本地方法栈(native method stack)、程序计数器(program counter register);
//堆:存放动态new 出来的 对象 、数组;而且 数据 不能共享;
//方法区:存放静态 变量,静态方法 、普通方法、常量、 字符串常量(严格说 放在 常量池 堆和栈都有)通俗的讲 就是 保存类的模板;
//本地方法栈:存放 的是 对象的引用,局部变量;#数据共享
//程序计数器:速度最快且空间最小的一块区域,由编译器分配,我们对此没有直接的控制权;
public class Equalorother {
static String s1="java";
public static void main(String[] args){
String s2=new String("java");
//s2="java"+"ass";
System.out.println(s1==s2);
System.out.println(s1.equals(s2));
String s3="java";
String s4="java";
String s5=s4+s3;
String s6="javajava";
System.out.println(s3==s4);//这里为什么相等呢 ?因为 s3是存在常量池中的,当s4定义时,此时将s4放入栈中,然后在常量池中寻找是否有"java"字符串,若有就指向他
s3="ss";//而当s3被重新赋值的时候,你会想s4是不是也会被改变呢?答案是:不会。因为同样多的道理,s3被赋值时,刄会在常量池中寻找 "ss",若有指向他,若没有,开辟出内存给他,
//且使得s3指向他。
System.out.println(s4+s3);
System.out.println(s6==s5);//s5是指向 堆的 s6指向的是栈 显然 不相等。
//equals可以判断对象是否相等 下面 相等
System.out.println(s6.equals(s5));
}
}