2009-01-30 104 views

Trả lời

9

"." là một chuỗi, '.' là một char.

24

Các chữ được đặt trong dấu ngoặc kép, ví dụ: "foo", là chuỗi, trong khi các chữ cái được trích dẫn một lần, ví dụ: 'c', là ký tự. Xét về hành vi nối, sẽ không có sự khác biệt rõ rệt. Tuy nhiên, đáng nhớ rằng các chuỗi và ký tự không thể hoán đổi cho nhau trong tất cả các trường hợp và bạn không thể có một chuỗi được trích dẫn được tạo thành từ nhiều ký tự.

+0

Để trở thành người theo dõi, '\ n' là một giá trị chấp nhận được đối với một char (mặc dù, nghiêm chỉnh, đó chỉ là một char, ngay cả khi được biểu diễn là hai). –

+0

* nod * - Tôi chủ yếu cố gắng chỉ ra rằng hai loại báo giá không thể hoán đổi cho nhau vì chúng có nhiều ngôn ngữ khác nhau. – Rob

3

"." là một Chuỗi chỉ bao gồm một ký tự. '.' là một nhân vật.

Khi bạn ghép chúng lại với nhau thì không có sự khác biệt.

+0

Có một sự khác biệt nhỏ thực sự, nó nhanh hơn một chút để nối thêm các ký tự hơn các chuỗi ký tự đơn. Sự khác biệt là rất tối thiểu mặc dù nó thực sự không quan trọng. – Esko

+0

Đó là sự thật. Nhưng bạn có thể tranh luận rằng nói với một người mới về loại vấn đề nhỏ này có thể đưa họ vào con đường sai lầm. :-) – Darron

1

Về mặt lý thuyết, việc thêm char vào chuỗi một cách nhanh chóng - Java 6 dường như tạo StringBuffers bên dưới bìa và tôi nhớ đọc trên trang web Hiệu suất Java kết hợp một char sẽ nhanh hơn một chút.

3

'' dành cho các ký tự chữ.

Vì vậy, bạn không thể làm điều này:

"OSC" + 'ar' + "Reyes"

Bởi vì ar không phải là một ký tự chữ.

Trong ví dụ của bạn nó không làm cho nhiều sự khác biệt bởi vì

'/' 

là một char theo nghĩa đen, và

"/" 

là một String đen chỉ chứa một ký tự.

Ngoài ra bạn có thể sử dụng bất kỳ ký tự UTF với cú pháp như sau

'\u3c00' 

Vì vậy, bạn cũng có thể sử dụng:

"Osc" + '\u3c00' + "ar 
+0

: -/Có gì sai với câu trả lời của tôi – OscarRyz

+0

Một điều bạn phải nhớ là unicode nó được chuyển đổi thành ký tự trước khi biên dịch. Vì vậy, '\ u005c' sẽ được chuyển thành '\' cung cấp một lỗi biên dịch. –

+0

@Peter: Ooohh !! Tôi không biết điều này. Cảm ơn nhận xét: class Un {String s = "Osc" + '\ u005c' + "ar"; } – OscarRyz

2

Thêm một char là nhanh hơn so với việc thêm một String một ký tự khoảng 25%. Tuy nhiên, điều này không quan trọng, ví dụ:

String s = "hello" + "/" + "world"; 

Điều này được chuyển thành một chuỗi bởi trình biên dịch sao cho không ghép nối/nối chuỗi sẽ xảy ra vào thời gian chạy trong mọi trường hợp.

12
System.out.println('a'+'b'+'c'); 
> 294 
System.out.println("a"+"b"+"c"); 
> abc 

gì đang xảy ra ở đây là (char) + (char) = (int) Nói cách khác. Sử dụng "" cho văn bản để tránh những điều bất ngờ.

4

Bạn chỉ có thể nhìn vào JDK :-)

Với hai chức năng:

public static String concatString(String cs) { 
    return "hello" + cs + "world"; 
} 

public static String concatChar(char cc) { 
    return "hello" + cc + "world"; 
} 

sau khi kiểm tra việc bytecode nó boils xuống hai AbstractStringBuilder.append(String) vs AbstractStringBuilder.append(char).

Cả hai phương pháp gọi AbstractStringBuilder.expandCapacity(int)) mà sẽ phân bổ một char mới [] cuối cùng và System.arraycopy nội dung cũ đầu tiên.

Sau đó AbstractStringBuilder.append(char) chỉ có để đưa char được đưa ra trong mảng trong khi AbstractStringBuilder.append(String) có để kiểm tra một vài trở ngại và kêu gọi String.getChars(int, int, char[], int) mà không khác System.arraycopy của chuỗi nối.

0

char theLetterA = 'A'; string myString = "một chuỗi";

Các vấn đề liên quan