.:: CODE SNIPPET ::.

"Your time is limited, so don't waste it living someone else's life"

Chuỗi trong Java


String trong Java là một kiểu dữ liệu được sử dụng rộng rãi (và trong hầu hết các ngôn ngữ lập trình cũng vậy), nó cho phép chúng ta lưu trữ bất kỳ thứ gì mà cần thao tác với ký tự, câu chữ, số điện thoại hay thậm chí là số. Nhưng, để biết được nó hữu ích như thế nào, bạn cần biết vài điều quan trọng về String trước khi bạn sử dụng nó một cách rộng rãi trong khi lập trình.
String – Object hay là Primitive?
String có thể đưuọc xem như là một loại primitive trong Java, nhưng thực tế nó không phải như vậy. Vì thật sự thì một String được tạo thành từ một mảng các ký tự primitive. Nói cách khác, nếu bạn tạo ra một String “Hello World” như sau:

String helloVar = "Hello World";

thì bạn sẽ thấy trong debugger như sau:

Bạn có thể thấy một String được tạo nên từ một mảng các ký tự char với 11 phần tử. Mà chắc điều này thì không có gì xa lạ với các bạn phải không?
Một vấn đề quan trọng khác về String trong Java là nó là bất biến. Điều này có nghĩa là gì? Nghĩa là một khi bạn tạo ra một String, nó không thể được thay đổi. Đối với ví dụ trên đối với biến helloVar, nếu mình muốn thay đổi nội dung của biến đó, mình sẽ phải:
Gán một giá trị mới vào biến helloVar đang tồn tại.
Tạo một đối tượng String mới và gán giá trị thay đổi vào nó.
Vậy bạn nghĩ là trong bước “gán một giá trị mới vào biến helloVar” thì nó đã làm được cái chuyện là thay đổi giá trị của biến rồi mà, sao lại nói là bất biến được. Nhưng thật sự, những chuyện sảy ra bên dưới thì thú vị lắm. Các bạn sẽ hiểu tại sao mình nói như vậy trong phần tiếp theo nhé
Memory
Như bạn biết, tất cả các biến trong Java sẽ được lưu trữ trong bộ nhớ máy tính. Các biến đó sẽ được cấp một không gian vùng nhớ và được xác định bằng các địa chỉ. Cũng giống như địa chỉ nhà của bạn vậy. Nếu bạn tạo ra một biến String mới, nó sẽ được cấp một địa chỉ mà khởi tạo là rỗng. Điều này tương tự như khi bạn di chuyển chỗ ở tới một căn nhà mới, bạn dĩ nhiên là không thể vào ở nhà đó, nếu đang có người chủ khác sống ở đó. Trên bộ nhớ máy tính cũng vậy, Java sẽ phân định rằng ở đâu có không gian vùng nhớ trống. Vì String là bất biến, chúng không thể bị thay đổi , cũng như bạn không thể tìm đến địa chỉ mà đã có chủ, thì máy cũng không thể nào cấp cho các biến vùng nhớ mà đã có biến ở vị trí đó rồi., vì thế nó sẽ nằm đâu đó bên cạnh vị trí đó mà thôi. Cách duy nhất để thay đổi những gì đang tồn tại tại vị trí đó là cấp cho nó một địa chỉ mới với giá trị mới đã được thay đổi. Trong thế giới thật cũng vậy, nếu bạn đang sống trong nhà của bạn tại địa chỉ nào đó cùng với vợ và hai con, nhưng bạn muốn có một đứa con khác (căn nhà nó không đủ chỗ chứa thêm một đứa con nữa) , thì bạn phải di chuyển đến một căn nhà mới trước khi có con. Nên nếu bạn chỉ muốn thay thế giá trị của một biến String đã có, thì Java sẽ phá nhà của bạn (xóa bộ nhớ của biến hiện tại của bạn) và chuyển bạn đến một căn nhà mới bên cạnh (gán một biến tương tự vào vùng nhớ tiếp theo). Nói chung, về mặt bộ nhớ thì biến trong Java sẽ không thể thay đổi được.
Việc nối chuỗi
Một trong những vấn đề thú vị bạn có thể làm với String trong Java là nối chuỗi. Nghĩa là sao, nghĩa là bạn có thể nối những chuỗi con thành một chuỗi dài hơn. Ví dụ:

String str1 = "Hello ";
String str2 = "World";
String str3 = "!";
System.out.println(str1+str2+str3);

Bạn thấy rằng những dấu + giữa những biến trong hàm println() sẽ làm công việc là gắn chuỗi thứ hai vào chuỗi thứ nhật và chuỗi thứ ba vào chuỗi thứ hai, và kết quả sẽ là:

Hello World!

Điều cuối cùng mà mình muốn đề cập là bạn có thể sẽ có vấn đề khi bạn cố gắng so sánh hai String với nhau. Vấn đề ở đây là bạn sẽ dùng hàm equals() hay so sánh một cách bình thường bằng dấu “==”. Về vấn đề này, bạn sẽ thấy rõ hơn trong bài viết vê sự khác biệt giữa hai phương pháp này. Các bạn xem thêm ở đây nhé.

Advertisements

One response to “Chuỗi trong Java

  1. Pingback: Những khái niệm cơ bản của các ngôn ngữ lập trình-Biến « .:: Hoàng Minh ::.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: