2013-04-09 14 views

Trả lời

6

(Chuỗi) giá trị phôi giá trị đối tượng vào chuỗi, chuỗi này phải mở rộng Chuỗi. value.toString() gọi phương thức trên giá trị đối tượng, được tiếp thu từ lớp Object và phương thức này trả về String, hiển thị thông tin của đối tượng này. Nếu bạn có một số giá trị của bạnClass, nó được khuyến nghị để ghi đè lênString()

mới Long (giá trị) tạo đối tượng mới của loại Dài và đặt giá trị Dài cho giá trị biến của bạn. (Long) giá trị nhận được giá trị đối tượng và đúc nó vào đối tượng của loại Long. trong giá trị Long (value) phải là số hoặc chuỗi.

+0

Bạn có thể kéo dài? Tôi nghĩ đó là một lớp được niêm phong trong Java. – Patashu

+0

giá trị ** có giá trị là gì **? – Gunaseelan

+0

nó là, tôi quên .. đặt giá trị của Long thành giá trị - biến của bạn: D –

3

Trong

new Long(value) 

tạo mới lớp wrapper Object

(Long)value 

kiểu giá trị cast Long (để wrapper) nếu có thể.

tương tự

String(value) 

loại cast giá trị cho đến Chuỗi

nhưng toString() là một phương pháp mà là một phương pháp lớp đối tượng và One phải ghi đè lên nó theo nhu cầu, ví dụ.

class User 
{ 
String name; 
int age; 

public String toString() 
{ 
return "name :"+name+" \n age :"+age; 
} 
} 
0

Trước hết, giá trị có phải là chuỗi không? giá trị (Chuỗi) là một diễn viên và sẽ chỉ hoạt động là giá trị là một chuỗi. Tuy nhiên, gọi value.toString() chỉ là một cuộc gọi phương thức. toString() là một phương thức của mọi đối tượng trong java, do đó sẽ không thất bại ngay cả khi giá trị là, giả sử, một số nguyên.

Hiện tại, giá trị Gọi (Long) đang cố gắng truyền giá trị thành Long và sẽ chỉ hoạt động nếu giá trị thuộc loại Dài. và, gọi Long (giá trị) thực sự gọi hàm tạo của lớp Long, chuyển giá trị làm tham số.

-1

String thực hiện lớp học CharSequence và cũng mở rộng từ lớp Object. Vì vậy, nếu ai đó đang sử dụng loại khác CharSequence chúng ta phải định kiểu như phiên bản đầu tiên của bạn (String)value
[(String)value nếu nó chứa String đối tượng và (StringBuffer)value cho StringBuffer loại đối tượng]
Về toString() chúng ta phải ghi đè toString() phương thức trong lớp của chúng tôi mà sẽ hiển thị biểu diễn đối tượng của chúng ta theo định dạng String theo yêu cầu của chúng ta.Nếu chúng ta không ghi đè lên thực hiện sau đó mặc định của toString() từ Object lớp sẽ được thừa hưởng và sẽ cung cấp cho các đại diện String trong hệ thập lục phân của mã băm của đối tượng của chúng tôi như [email protected]

thực hiện khác của CharSequenceCharBuffer, StringBuffer, StringBuilder

1>(Chuỗi) giá trị có nghĩa là value chứa đối tượng chuỗi. Nếu nó không chứa String, ClassCastException sẽ được ném vào thời gian chạy. Typecasting sẽ ném ngoại lệ thời gian biên dịch nếu bạn định kiểu với phân cấp kiểu không liên quan. như đưa ra dưới đây

Exception e = new Exception(); 
String str = (String)e; 

2> Gọi toString() nghĩa anyobject không cần thiết phải là một đối tượng String. Đúng cách ghi đè phương thức toString() trong lớp của chúng ta sẽ hữu ích cho việc biểu diễn chuỗi của lớp riêng của chúng ta và cũng sẽ không bao giờ ném bất kỳ ngoại lệ nào tồn tại trong thế giới java vì nó thừa kế toString() từ lớp đối tượng. Vì vậy, nếu ghi đè bạn toString và bạn in System.out.println(userObject); sau đó nó sẽ không hiển thị đại diện thập lục phân của mã băm của đối tượng của chúng tôi như [email protected]

public class UserObject { 
    String name; 
    int age; 
    @Override 
    public String toString() { 
     return " Name="+name+" \n age="+age; 
    } 

    public static void main(String[] args) { 
     UserObject uo = new UserObject(); 
     uo.name="AAA"; 
     uo.age=18; 
     System.out.println(uo); //output will be "Name=AAA age=18" instead of "[email protected]" 

    } 
} 

Về mới Long (value) và giá trị (Long).

new Long(value) có nghĩa là, bạn có giá trị là long/String bạn muốn chuyển đổi nó thành lớp đối tượng Long. Vì vậy, bạn có thể sử dụng Long (long), Long (String) constructor theo điều kiện.

Giải thích về kiểu chữ dài tương tự như trên Chuỗi typecasting hoặc bất kỳ typecasting nào. (Long)value có nghĩa là khi bạn nhận được mã như dưới đây thì bạn có thể nhập thành Long, Integer, Double cũng phụ thuộc vào giá trị được gán ở phía bên phải của biểu tượng bằng nhau.

Number i=10L; //java.lang.Number 
Long a= (Long)i; 
+0

Bạn đã nói 'nếu ai đó đang sử dụng loại 'CharSequence' khác mà chúng ta phải gõ', nhưng hãy cẩn thận. Bạn không thể bỏ một 'StringBuilder' thành một' String' chẳng hạn, giống như cách bạn không thể bỏ 'Integer' thành' Long' –

+0

Điều đó sẽ không hoạt động. Trong 'Number i = 10', 10 là' int', và được đóng hộp thành 'Integer'. Không thể truyền 'Integer' thành' Long'. Trình biên dịch sẽ không unbox i chỉ để rebox nó để 'Long'. Ngoài ra, thích 'Long.valueOf (long)' để tự gọi một hàm tạo. –

+0

Câu trả lời rất khó hiểu và một số lỗi hoàn toàn. CharSequence hoàn toàn không liên quan. Bạn không cần phải ghi đè lênString(). Sự tồn tại của một typecast không ngụ ý rằng đối tượng là đúng loại. -1 – EJP

-1

Tất cả đều rất khác nhau. Đầu tiên là Type Casting. Giả sử bạn nhận được một đối tượng trên phương thức của bạn, và bạn biết đó là một String, vì vậy bạn muốn nó được gọi là kiểu đó. vì vậy bạn làm điều đó

public void method(Object obj){ 
    String str = (String) obj; 
} 

Phương pháp toString là một kế thừa từ Object lớp, trả về cho bạn một đại diện String của bất kỳ Object nhất định.

Vì vậy, sự khác biệt là, khi bạn thực hiện việc truyền, đối tượng của bạn phải là String, không có chuyển đổi thực tế. Sự khác biệt là bạn có thể sử dụng một loại cụ thể hơn cho biến của bạn, nhưng khi bạn gọi toString không cần thiết.

Gọi toString có thể cung cấp cho bạn một đối tượng khác với đối tượng gốc, trừ khi lớp học của bạn đã là String, trong trường hợp đó, cùng một tham chiếu được trả lại.

+0

Gọi 'toString()' không nhất thiết tạo ra một đối tượng mới, mặc dù nó hầu như không quan trọng. Sau 'String s = ...; String t = s.toString(); 's và t phải là cùng một đối tượng. –

+0

Có, tôi thấy quan điểm của bạn. Bạn đang xem xét các chuỗi hồ bơi. Những gì tôi có nghĩa là đó là sự trở lại của phương pháp không phải là đối tượng chính xác giống như, nó là trong typecasting. Tôi sẽ cố gắng và chỉnh sửa câu trả lời để làm cho nó rõ ràng hơn –

+0

Chuỗi là không thay đổi, do đó không có lý do gì để phương thức 'toString' sao chép một. Tôi khá chắc chắn thực hiện String là 'public String toString() {return this; } '. –

-1

khi bạn thực hiện "(Chuỗi) giá trị", đó là cách truyền, nói cách khác, bạn rõ ràng "đang nói" cho trình biên dịch giá trị là một chuỗi, nhưng nếu không, sẽ ném ngoại lệ thời gian chạy.

khi bạn làm "value.ToString()" sẽ tạo ra một chuỗi mới với giá trị này

cùng đi cho dài

+0

Thực hiện chuỗi.toString() thực sự tạo chuỗi MỚI? – Jayamohan

+0

có, chuỗi là bất biến –

+0

Có. Các chuỗi là không thay đổi. Bạn đã kiểm tra phương thức String.toString() đang làm gì chưa. Là nó tạo chuỗi mới. – Jayamohan

2

Trong mọi ngôn ngữ (mà tôi biết) sẽ có sự thay đổi diễn viên loại đối tượng.

Bạn sử dụng phôi (String) khi bạn có, một tham chiếu mà trình biên dịch nghĩ là một đối tượng, nhưng bạn biết thực sự là một chuỗi và bạn muốn trình biên dịch biết điều đó. Nếu bạn có một số nguyên và cố gắng truyền vào chuỗi, bạn sẽ nhận được một ClassCastException khi bạn chạy mã.

Vì vậy, nếu bạn có một số nguyên và muốn biểu diễn chuỗi của nó, bạn sẽ sử dụng toString.

(Lưu ý rằng một diễn viên S change thay đổi loại "vô hướng". Tức là, bạn có thể truyền từ int sang char với (char) và trình biên dịch sẽ thực hiện chuyển đổi thích hợp. "Bỏ" trong trường hợp này hoàn toàn khác Thật không may là truyền thống đã dẫn đến cùng một cú pháp để sử dụng cho cả hai.)

0

Khi bạn đưa một đối tượng vào Chuỗi, bạn chắc chắn rằng nó là một chuỗi và tại thời gian chạy nếu nó xảy ra một đối tượng khác sau đó bạn nhận được một lớp ngoại lệ.

Mặt khác, khi bạn gọi phương thức toString() trên một đối tượng, nó không cần phải là một chuỗi vì tất cả các lớp kế thừa phương thức đó từ đối tượng lớp.