java 虚拟机 体系结构

时间:2021-11-09 10:46:08
 * @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));
	} 
}