String類 的內存是怎樣分配的

菜鳥救助 String類 的內存是怎樣分配的??  

s1 與 s2 是兩個不同的對象, 所以!=
使用new肯定會產生新的對象, 這是不容置疑的

"abcd"是在常量池中的存儲的,new String("abcd")是存在於堆內存中的。s1 s2 是分別指向這兩塊的引用。 s1 == s2 比的是內存地址 所以 爲FALSE 堆棧中分配內存空間。
new 是新開闢了一塊類存,,當然不相等了
這個和 "=="與“equals()”的區別 有異曲同工之妙
.來自 String 的憂慮上面這段程序中,到底有幾個對象呢?
可能很多人脫口而出:兩個,s1 和 s2爲什麼?String 是 final 類,它的值不可變。
看起來似乎很有道理,那麼來檢測一下吧,稍微改動一下程序就可以看到結果了:
原來,程序在運行的時候會創建一個字符串緩衝池
當使用 s2 = "Monday" 這樣的表達是創建字符串的時候,程序首先會
在這個String緩衝池中尋找相同值的對象,在第一個程序中,s1先被
放到了池中,所以在s2被創建的時候,程序找到了具有相同值的 s1
將 s2 引用 s1 所引用的對象"Monday"
第二段程序中,使用了 new 操作符,他明白的告訴程序:
“我要一個新的!不要舊的!”與是一個新的"Monday"Sting對象被創
建在內存中。他們的值相同,但是位置不同,一個在池中游泳
一個在岸邊休息。哎呀,真是資源浪費,明明是一樣的非要分開做什麼呢?
首先你要理解String s1="abcd";這個s1是什麼,說到這也就是要理解對象引用和對象的一些知識,在java中對象的引用時存在在堆棧中的,而對象是存放在堆中的,當你這樣String s1;定義的時候就定義了一個對象的引用s1,我們在程序中用的其實都是對象的引用,只是根據這個對象的引用我們可以找到我們所創建的對象,至於對象的引用是什麼,通俗點你就將對象的引用看成是c語言中所說的"指針",好了,現在我們來看看“==”到底是比較的什麼,它比較的是對象引用的地址,既然比較的是地址,他們當然是不相同的了,你有疑問,是覺得上面輸出是對的,那是因爲你覺得們是相同的,你所說的相同是指他們指向的對象的內容相同,如果是比較內容當然是相同的了,總之,要弄清楚,這個s1、s2是對象的引用,而不是對象
== 不僅比較對象是否相等 同時也是比較地址是否相同
equals 是object類方法,比較的是兩個對象是否相等。
如果想比較對象是否相等,請使用 (object).equals(Object b)方法。
對象池問題,s2在對象池中,s1在常量池中
s1每次賦值時,都會先在常量池中找,然後,如果沒有,就會重新創建一個常量
== 比較的是對象的引用地址是否相同,也就是說s1,s2指向同一個對象
可以做個羣集,就不會掉了。或者用sso,應該能實現你要的東西。
原來應用A的session在應用A中找不到了?
做羣集的話,是給server做羣集,還是什麼,不懂誒??
還有這個是和應用服務器有關的嗎,在Tomcat中部署的話,也會這樣嗎?
如果只是a要得到a的session,可以用ajax來調用b的,在a中處理b的返回,這樣,你的a的頁面不會關閉的,session也就不會丟了。
但是a應用是提供了一個連接,點擊這個連接就要打開應用b,這是一整塊大的應用,
我在網上查了下,可能和weblogic的domain有關係。
但是,我模擬了下,
1.在同一個domain下建兩個server,每個server下部署不同的應用,
但是在應用間a跳轉b時,a中session還是可以找到。
2.在兩個不同domain下分別建一個server,每個server下部署不同的應用,
但是在應用間a跳轉b時,a中session也還是可以找到。
來源:足球直播




發佈了39 篇原創文章 · 獲贊 0 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章