Vấn đề về Integer và String
Chào mọi người.
Em đang theo học về lập trình java và em gặp một chút vấn đề trong việc xử lý Integer và String mong ace trong nhóm giúp đỡ ạ.
Ví dụ 1:
Integer a = 127;
Integer b = 127;
boolean check c = a==b;//true
// a và b nhận giá trị từ -128 đến 127 thì c đều trả về true ngoài khoảng đó ra thì c trả về false
Ví dụ 2:
String a = “ABC”;
String c = “ABCDEF”;
String b = c.subString(0,3);// trả về ABC
String d = c.subString(0,3):
String e = c.subString(0,c.length());// trả về ABCDEF
boolean check c1 = a==b;//false
boolean check c2 = b==d;//false
boolean check c3 = e==c;//true
Mọi người có thể giải thích cho em lý do tại sao nó lại trả về kết quả như vậy không ạ.
Cám ơn đã xem ạ.
em có thể check source Java hàm Integer.valueOf() để hiểu rõ hơn vì:
Integer a = 127; //=Integer.valueOf(127);
Integer b = 127; //=Integer.valueOf(127);
và hàm ValueOf nó thể này:
-> giá trị từ -127 đến 128 được cache lại, mục đích vì những số trong khoảng này dùng tần suất cực nhiều -> nên cache lại đỡ tốn bộ nhớ.
check hàm subString():
String a = “ABC”; // String from pool
String c = “ABCDEF”; // String from pool
String b = c.subString(0,3);// new String
String d = c.subString(0,3): // new String
hàm subString:
-> new String() luôn tạo ra 1 object mới nên reference luôn khác với những cái khác;
Chỗ này em chưa hiểu lắm, anh Cương có thể giải thích lại đoạn này đc không ạ?
đó là source của Java, mục đích là để lấy subString, a nghĩ hiểu thế là đủu
rồi
là do phiên bản cũ Java 6 thì phải, String có thêm offset để substring ko cần tạo chuỗi mới mà xài ké nội dung của chuỗi cũ luôn
new String(offset + beginIndex, endIndex - beginIndex, value);
sẽ xài private constructor này:do có offset mà ko cần tạo mảng
value
mới, xài kévalue
củas
, tiết kiệm bộ nhớ 1 tí. Nhưng sang Java 7u6 ko xài nữa:Chuỗi bây giờ chỉ còn có mảng
value
và inthash
thôi, offset và count ko cần nữaCảm ơn a Em hiểu r.
Dạ em cám ơn.
cái IntegerCache cái lớp đó lạ quá em chưa từng gặp…
Mà anh ơi mình cần tìm xem các phương thức có sẵn của java được viết như thế nào( hay source Java) thì tìm ở đâu ạ.
Em có thể xem ở đây:
http://grepcode.com/
dạ vâng em cám ơn anh