天天看點

Java語言個人學習總結1

1.Java中棧區裡面的資料是共享的,但是不同與C語言裡面的多個指針指向同一個變量可以修改變量值,在Java中,當定義一個變量時候,編譯器會首先去查找該變量的值是否存在于棧區,如果有,直接将變量的引用指向該值,否則新建立一個值并讓變量指向它。

Person p1=new Person("zhou");
		Person p2=new Person("dante");
		p2=p1;
		p2.name="turn";
		System.out.println(p1.name);
		System.out.println(p2.name);
           
int a=3;int b=3;//a,b同時指向3 a=5;System.out.println(b);//輸出為3</textarea> 2.Java中記憶體分為堆記憶體(new出來的對象放在這裡)和棧記憶體(基本資料類型建立的變量都放在這),棧記憶體的變量的存取比堆記憶體快。 3.字元串的建立,一種是從字元串池建立(String s=“abc”;),另一種是從堆建立(String s=new String("abc");)
  • 字元串池的速度快,每個串都是唯一的,如果定義的對象已經位于串池,直接将變量引用指向該串,不建立新的串;否則建立新的串,并将變量引用指向該串;
<textarea readonly="readonly" name="code" class="java"> 
String a="csdn";
String b="csdn";
System.out.println(a==b);//輸出為true,
</textarea>
           
//“==” 用來比較變量的引用是否相同;  “equals()” 方法使用來比較變量引用裡面的内容是否相同;
           
輸出值為“true”說明他們的引用是相同的,也就是說,串池裡面的每個内容是唯一的
  • 堆建立,會首先檢查字元串池裡面是否存在,如果有,直接複制到堆内,否則,在堆内建立一個串;
<textarea readonly="readonly" name="code" class="java"> 
           
String a=new String("csdn");
String b=new String("csdn");
System.out.println(a==b);//輸出false  L1
System.out.println(a.equals(b));//輸出true  L2
           
</textarea>
           
堆記憶體建立的每個串,都是不同的對象,它們可能内容相同(L2),但是每個引用都指向不同的對象(L1);

<textarea readonly="readonly" name="code" class="java">

String a=new String("csdn");
String b="csdn";
System.out.println(a.equals(b));//輸出為true  L2
           
</textarea>
           

使用不同的方式建立串,即使引用指向的内容是相同的(L2),引用也不會相同(L1)

4.從堆記憶體建立的變量(new 出來)會産生和指針一樣的效果,如果多個引用指向同一個值,那麼隻要是其中一個改變了該值,其他引用的值會跟着改變
           
<textarea readonly="readonly" name="code" class="java">		
		Person p1=new Person("zhou");
		Person p2=new Person("dante");
		p2=p1;
		p2.name="turn";
		System.out.println(p1.name);//輸出turn
		System.out.println(p2.name);//輸出turn
           
</textarea>