Bạn có sử dụng StringUtils.EMPTYthay vì ""?
Ý tôi là ở dạng giá trị trả về hoặc nếu bạn đặt giá trị của một biến Chuỗi. Tôi không có ý so sánh, vì ở đó chúng tôi sử dụngStringUtils.isEmpty()
Câu trả lời:
Dĩ nhiên là không. Bạn có thực sự nghĩ rằng "" không đủ rõ ràng?
Hằng số về cơ bản có 3 trường hợp sử dụng:
Không áp dụng ở đây.
EMPTYkhông mang bất kỳ ý nghĩa nào mà bản thân chuỗi trống chưa có. Đáng chú ý nhất, nó không ghi lại lý do tại sao bạn quyết định sử dụng một chuỗi rỗng trong trường hợp cụ thể đó. Việc đặt tên cho một hằng số ONEvà giả vờ rằng có một điểm trong việc sử dụng hằng số đó thay vì giá trị.
Tôi sử dụng StringUtils.EMPTY, để ẩn nghĩa đen và cũng để thể hiện điều đó return StringUtils.EMPTYhoàn toàn được mong đợi và sẽ trả về một chuỗi trống, ""có thể dẫn đến giả định ""có thể dễ dàng thay đổi thành một thứ khác và đây có thể chỉ là một sai lầm. Tôi nghĩ EMPTYlà biểu cảm hơn.
StringUtils.EMPTY ít biểu cảm hơn "".
""cách diễn đạt hơn là sử dụng StringUtils.EMPTY, và những gì bạn đã nói đã không thay đổi suy nghĩ của tôi về điều đó. Tôi chỉ có thể tin rằng các nhà phát triển đã viết sai một chuỗi rỗng rất, rất thỉnh thoảng - nhưng tôi sẽ xem xét sự rõ ràng của chuỗi ký tự trên một lần trong một triệu (và dễ dàng tìm thấy trong thử nghiệm, hy vọng ... ) lỗi, cá nhân.
Không, chỉ cần sử dụng "".
Chữ ""rõ ràng như pha lê. Không có sự hiểu lầm nào về ý nghĩa của nó. Tôi sẽ không biết tại sao bạn cần một hằng số lớp cho điều đó. Tôi chỉ có thể giả định rằng hằng số này được sử dụng trong toàn bộ gói chứa StringUtilsthay vì "". Tuy nhiên, điều đó không có nghĩa là bạn nên sử dụng nó.
Nếu có một tảng đá trên vỉa hè, bạn không cần phải ném nó.
Tôi ngạc nhiên về việc có bao nhiêu người hài lòng khi cho rằng "" thực sự là một chuỗi rỗng và không (vô tình?) Chứa bất kỳ ký tự vô hình và không khoảng cách tuyệt vời nào của Unicode. Vì tình yêu của tất cả những gì tốt đẹp và tử tế, hãy sử dụng EMPTY bất cứ khi nào bạn có thể.
Tôi sẽ thêm hai xu của mình ở đây vì tôi không thấy ai nói về việc Stringthực tập và khởi tạo Lớp học:
Stringcác chữ trong các nguồn Java được thực tập nội trú, làm cho bất kỳ "" và StringUtils.EMPTYcác giống đối tượngStringUtils.EMPTY có thể khởi tạo StringUtilslớp, vì nó chỉ truy cập vào thành viên tĩnh của nó EMPTY nếu nó không được khai báofinal (JLS là cụ thể về điểm đó). Tuy nhiên, là cuối cùng, vì vậy nó sẽ không khởi tạo lớp.org.apache.commons.lang3.StringUtils.EMPTY Xem câu trả lời liên quan về Thực hiện chuỗi và Khởi tạo lớp , tham khảo JLS 12.4.1 .
StringUtilslớp.
Tôi không thực sự thích sử dụng nó, vì return "";nó ngắn hơn return StringUtils.EMPTY.
Tuy nhiên, một lợi thế sai của việc sử dụng nó là nếu bạn nhập return " ";thay vì return "";, bạn có thể gặp phải các hành vi khác (liên quan đến việc bạn có kiểm tra chính xác một Chuỗi trống hay không).
"", tôi ghét phải gõ cùng một chuỗi chữ nhiều hơn một lần, thậm chí đôi khi chỉ một lần. Tôi muốn khai báo các hằng số trong Constants.java , nhưng không lặp lại chúng ở mọi nơi trong mã nguồn.
return ""; là xấu xí, TÔI ƯU ĐÃI sử dụng return StringUtil.EMPTY(được khai báo trong lớp StringUtil của riêng tôi , KHÔNG PHẢI là StringUtils của Apache ).
Nếu lớp của bạn không sử dụng bất kỳ thứ gì khác từ dấu phẩy thì sẽ thật tiếc nếu có sự phụ thuộc này chỉ cho giá trị ma thuật này.
Nhà thiết kế của StringUtils sử dụng rất nhiều hằng số này và đó là điều đúng đắn nên làm, nhưng điều đó không có nghĩa là bạn cũng nên sử dụng nó.
Thành thật mà nói, tôi cũng không thấy sử dụng nhiều. Nếu bạn muốn so sánh ví dụ với một chuỗi trống, chỉ cần sử dụngStringUtils.isNotEmpty(..)
StringUtils.isNotEmpty(..)cũng thực hiện kiểm tra null nên nó không hoàn toàn giống như so sánh với một chuỗi rỗng.
nullnhư thế nào? như đối số thứ 2 của equals, nhưng kết quả sẽ giống nhau -false
isNotEmptylà trái ngược với "".equals(…), do đó, thực tế là nó sẽ đối xử nullnhư chuỗi rỗng là khác nhau để so sánh với một chuỗi rỗng, "".equals("")→ true,"".equals(null) → false, StringUtils.isNotEmpty("")→ false, StringUtils.isNotEmpty(null)→ false. Nếu bạn chỉ muốn biết liệu một chuỗi rỗng, sử dụng string.isEmpty(), trong đó có hành vi phải trở về truekhi và chỉ khi nó là một chuỗi rỗng và ném một NullPointerExceptionnếu chuỗi là null...
Tôi thấy StringUtils.EMPTYhữu ích trong một số trường hợp để dễ đọc. Đặc biệt với:
Toán tử bậc ba, ví dụ.
item.getId() != null ? item.getId() : StringUtils.EMPTY;
Cũng bằng cách sử dụng một hằng số, một tham chiếu tới StringUtils.EMPTYđược tạo ra. Mặt khác, nếu bạn cố gắng khởi tạo chuỗi ký tự ""mỗi lần JVM sẽ phải kiểm tra xem nó đã tồn tại trong nhóm chuỗi chưa (mà nó có thể sẽ xảy ra, vì vậy không có chi phí tạo phiên bản bổ sung). Chắc chắn khi sử dụng StringUtils.EMPTYtránh phải kiểm tra String pool?
StringUtils.EMPTYhằng số được giải quyết tại thời điểm biên dịch.
StringUtil.EMPTYlà một hằng số thời gian biên dịch, một tham chiếu đến nó được biên dịch thành mã bytec chính xác giống như khi sử dụng ""trực tiếp. Hơn nữa, tôi không hiểu tại sao toán tử bậc ba nên tạo ra bất kỳ sự khác biệt nào. Đó là một biểu hiện giống như bất kỳ biểu hiện nào khác. Bất kỳ lý do nào để sử dụng hoặc không sử dụng hằng số được đặt tên cũng áp dụng cho toán tử bậc ba.
Không, vì tôi còn nhiều thứ để viết. Và một Chuỗi trống là rỗng độc lập plattform (trong Java).
File.separator tốt hơn "/" hoặc "\".
Nhưng hãy làm như bạn thích. Bạn không thể mắc lỗi đánh máy nhưreturn " ";
someString.isEmpty()thay thế.
Vâng, nó có ý nghĩa. Đó có thể không phải là cách duy nhất để đi nhưng tôi có thể thấy rất ít trong cách nói "không có ý nghĩa" này.
Theo ý kiến của tôi:
It will still require changing everywhere if you don't define your own variable and use it in multiple places.bạn sẽ thay đổi một chuỗi rỗng thành một chuỗi rỗng khác?
StringUtils.EMPTY. Nó làm rõ rằng việc sử dụng Chuỗi trống là có chủ đích chứ không phải do lười biếng nào đó ("Ồ, cái này yêu cầu Chuỗi, hãy vượt qua"""). Nếu ai đó nhấn đoạn mã này, anh ta sẽ suy nghĩ kỹ trước khi thực hiện thay đổi. Ngoài ra, nếuStringUtils.EMPTYđược xác định là biến của riêng bạn, chẳng hạn nhưMyClass.EMPTY, việc thực hiện thay đổi đối với "đại diện cho sự trống rỗng" sẽ yêu cầu thay đổi một dòng mã. Ví dụ: bạn có thể thay đổi nó thành"<empty>"thay vì Chuỗi trống"". Nhưng, tôi nghĩ rằng điều này đã đi hơi quá xa.