Cómo utilizar el método toString() en Java
toString
public String toString() devuelve la representación de cadena del objeto. Normalmente, el método toString devuelve una cadena que "representa textualmente" este objeto. El resultado debe ser conciso pero fácil de leer. Se recomienda que todas las subclases anulen este método.
El método toString de la clase Object devuelve una cadena que consta del nombre de la clase (de la cual el objeto es una instancia), la etiqueta "@" y el valor hexadecimal sin signo del código hash de este objeto. La base representa la composición. En otras palabras, este método devuelve una cadena cuyo valor es igual a:
getClass().getName() '@' Integer.toHexString(hashCode())
toString es derivado de la clase Object de Java, definida en Object como: Devuelve una cadena de nombre de clase @hashcode, que puede anularse para devolver información que crea útil
toStrng no tiene argumentos
. anular: public String toString() {
// inserta tu código
return "informations"
}
Porque en java La clase de objeto es la clase base, por lo que cada clase tendrá un método toString.
System.out.println(Object) en realidad llama al método toString del objeto.
Lo que usamos con más frecuencia es el método toString de la clase String. La clase String anula el método toString de Object para devolver el valor de cadena de String.
Debido a que es un método que ya existe en el objeto, y todas las clases heredan el objeto, entonces "todos los objetos tienen este método".
Por lo general, solo se asigna para facilitar la salida, como. como System.out.println(xx), si el "xx" entre paréntesis (_kuo4 hao4 li3 mian4) no es de tipo String, el método toString() de xx se llamará automáticamente
En resumen , es solo sun Cuando la compañía desarrolló Java, se agregó un método especialmente para facilitar las operaciones de cadenas para todo tipo de caracteres (de0 shi2 hou4 wei4 le0 fang1 bian4 suo3 you3 lei4 de0 zi4)
//ToString try cambiando el nombre
}
A obj=new A();
System.out.println(obj);
Tú obtendrá el resultado: xxxx El nombre de la clase más la dirección de @xxxxxxx
System.out.println(obj.getString());
obtendrá el resultado: este es A
toString La ventaja es que se llamará automáticamente cuando se encuentre un método de salida como "println", y no es necesario escribirlo explícitamente
Porque es un método que ya existe en Object, y todas las clases heredan Object. Entonces "todos los objetos tienen este método".
Por lo general, es solo por conveniencia de la salida, como System.out.println(xx). Si el "xx" entre paréntesis no es de tipo String, el método toString() de xx será. llamado automáticamente
En resumen, es solo un método agregado especialmente por Sun Company para facilitar las operaciones de cadenas de todas las clases al desarrollar Java
Respuesta adicional:
El El propósito de escribir este método es que sea conveniente de operar, por lo que puede usarse o no en operaciones de archivos
Ejemplo 1:
clase pública A{
public String toString(){return "this is A ";}
}
Si existe la siguiente oración en un método:
A obj= new A();
System .out.println(obj);
Obtendrá el resultado: este es A
Ejemplo 2:
clase pública A{
public String getString(){return "this is A";}//toString intenta cambiar el nombre
}
A obj=new A();
System.out.println(obj);
Obtendrá el resultado: el nombre de la clase más la dirección de xxxx@xxxxxxx p>
System.out.println(obj.getString()) ;
Obtendrá el resultado: este es A
¿Ves la diferencia? toString es que se llamará automáticamente cuando encuentre un método de salida como "println", sin tener que escribirlo explícitamente.
toString() es un método que anula la clase principal Object. El propósito es expresar el objeto en forma de cadena.
Las clases de entidad generales deben anular toString(). equals(), hashCode() y otros métodos, como Usuario, Estudiante y otras clases de entidad
Si una clase se usa para manejar algún negocio, no es necesario anular toStirng()
Estos métodos están encapsulados en el paquete commons-lang,
1) public boolean equals(Object obj){
return EqualsBuilder.reflectionEquals(this.obj); p >
}
2) public int hashCode(){
return HashCodeBuilder.reflectionHashCode(this);
}
3) public String toStirng(){
teturn ToStringBuilder.reflectionToString(this);
}
El método toString de la clase Object devuelve una cadena, el carácter La cadena consta del nombre de la clase (de la cual el objeto es una instancia), el marcador "@" y la representación hexadecimal sin signo del código hash de este objeto.
En otras palabras, este método devuelve una cadena cuyo valor es igual a:
getClass().getName() '@' Integer.toHexString(hashCode())
Por ejemplo: com.struts2.User@de6ced
Después de reescribir el método toString() de esta clase, se devolverá el valor de retorno del método toString() de esta clase.
¿ver copia simple en el portapapeles?
paquete com.struts2;
usuario de clase pública {
nombre de usuario de cadena privada
contraseña de cadena privada
usuario público(){
}
usuario público (nombre de usuario de cadena, contraseña de cadena) {
this.username=nombre de usuario;
this.password= contraseña
}
public String getUsername() {
return nombre de usuario;
}
public void setUsername(String nombre de usuario) {
this.username = nombre de usuario
}
public String getPassword() {
devolver contraseña
}
public void setPassword(String contraseña) {
esto. contraseña = contraseña;
}
public String toString(){
return este.nombre de usuario esta.contraseña
} p> p>
public static void main(String[] args) {
System.out.println(new User("Zhang San", "123456")); p> }
}
1. Método toString() La clase Object tiene un método toString(), y cada clase que cree hereda este método. Devuelve una representación de cadena del objeto y es muy útil para la depuración. Sin embargo, el método toString() predeterminado a menudo no puede satisfacer las necesidades y es necesario anular este método.
El método toString()
1. Método toString() La clase Object tiene un método toString(), y cada clase que cree hereda este método. Devuelve una representación de cadena del objeto y es muy útil para la depuración. Sin embargo, el método toString() predeterminado a menudo no puede satisfacer las necesidades y es necesario anular este método.
El método toString() convierte el objeto en una cadena. Mire el siguiente código:
paquete de muestra;
clase Villano {
nombre de cadena privada
conjunto vacío protegido (cadena nm; ) {
nombre = nm;
}
villano público (nombre de cadena) {
this.name = nombre; p>
}
public String toString() {
return "Soy un villano y mi nombre es " nombre
} p>
}
orco de clase pública extiende villano {
privado int número de orc;
orco público (nombre de cadena, int número de orc) {
super(nombre);
this.orcNumber = orcNumber;
}
cambio vacío público (nombre de cadena, int orcNumber) { p>
set(nombre);
this.orcNumber = orcNumber;
}
public String toString() {
return "Orco" orcNumber ":" super.toString();
}
public static void main(String[] args) {
Orco orco = nuevo Orco("Limburger", 12);
System.out.println(orco
orc.change("Bob", 19); p> System.out.println(orc);
}
}
Resultado:
sample.Orc@11b86e7sample.Orc @11b86e7
Si eliminas los comentarios, es decir, después de agregar dos métodos toString(), obtendrás
El resultado:
Orc12: I' Soy un villano y mi nombre es LimburgerOrc19: Soy un villano y mi nombre es Bob
2. Utilice toString() en la clase contenedor
Escriba una clase de herramienta para generar el Iterador en la consola.
importar java.util.Iterator;
impresora de clase pública {
static void printAll(Iterator e){
while(e .hasNext()){
System.out.println(e.next());
}
}
}
Anula el método toString() de la clase principal en la clase Hamster.
Hámster de clase pública {
private int hamsterNumber;
public Hamster(int hamsterNumber){
this.hamsterNumber=hamsterNumber;
}
public String toString(){
return "Este es Hamster #" hamsterNumber
}
}
Utilice la clase contenedora en la clase HamsterMaze para cargar objetos de la clase Hamster y generar los resultados.
importar java.util.ArrayList;
importar java.util.List;
clase pública HamsterMaze {
@SuppressWarnings(" sin marcar")
public static void main(String[] args){
List list=new ArrayList();
for(int i=0; ilt; 3; i )
list.add(new Hamster(i));
Impresora.printAll(list.iterator());
}
Resultado:
Este es el Hámster #0. Este es el Hámster #1. Este es el Hámster #2.
3. Un bean universal que implementa toString()
Cuando estaba trabajando en un proyecto, descubrí que se necesitaban muchos beans para implementar el método toString(), así que simplemente implementé un bean universal y luego lo heredé a través de otros. .
importar java.lang.reflect.Field;
clase pública BaseBean {
public String toString() {
StringBuffer sb = new StringBuffer();
prueba {
Clase t = this.getClass();
Campo[] campos = t.getDeclaredFields(); p> p>
for (int i = 0; i lt; campos.longitud; i) {
Campo campo = campos[i];
campo.setAccessible( verdadero) ;
sb.append("{");
sb.append(field.getName());
sb.append(": ") ;
if (field.getType() == Integer.class) {
sb.append(field.getInt(this));
} else if (field.getType() == Long.class) {
sb.append(field.getLong(this));
} else if (field.getType( ) = = Boolean.class) {
sb.append(field.getBoolean(this));
} else if (field.getType() == char.class) { p>
sb.append(field.getChar(this));
} else if (field.getType() == Double.class) {
sb .append (field.getDouble(this));
} else if (field.getType() == Float.class) {
sb.append(field.getFloat(this) )) ;
} else
sb.append(field.get(this));
sb.append("}");
}
} catch (Excepción e) {
e.printStackTrace();
}
return sb.toString();
}
}
Clase de prueba
clase pública TestBean extiende BaseBean {
private int id;
public int getId() {
ID de retorno
}
public void setId(int id) {
this.id = id;
}
public static void main(String[] args) {
TestBean testBean = new TestBean();
testBean.setId(9);
System.out.println(testBean.toString());
}
}
Resultado
{id: 9}
Exception()
Construye una nueva excepción con el mensaje detallado nulo.
Excepción (mensaje de cadena)
Construye una nueva excepción con el mensaje detallado especificado.
Excepción (mensaje de cadena, causa arrojable)
Construye una nueva excepción con el mensaje detallado y la causa especificados.
Excepción (causa arrojable)
En Java, si un objeto no anula el método toString(), llamará al toString() de la clase principal. clase también Si este método no se anula, lo llama iterativamente hasta que se ejecuta el método toString() de Object.
Cuando imprimimos este método toStirng(), aparecerán las palabras XXXX@e29820. Entonces, ¿cuál es el valor después de @? ¿Es la dirección de memoria donde se encuentra el objeto? Probémoslo a continuación:
paquete oliver.examination.part1;
import java.util.ArrayList
import java.util.List
clase pública ObjectToStringTest {
privado estático final int TAMAÑO=10000;
público estático void main(String[] args)
{ p> p>
//Crea una lista para almacenar objetos
Listlt; list = new ArrayListlt (); p>
//Crea un objeto TAMAÑO. Si toStirng representa una dirección de memoria, la dirección no se repetirá.
//Entonces no debería haber elementos duplicados en la lista.
//El tamaño de la lista debe ser TAMAÑO
for(int i=0; ilt; TAMAÑO; i){
Objeto obj = nuevo Objeto () ;
if(list.contains(obj.toString())){
System.out.println("¡Objeto: " obj.toString() " ya existe! ") ;
existeNumber ;
}else
list.add(obj.toString());
}
System.out.println("El tamaño de la lista: " list.size());
System.out.println("El número de elementos repetidos: " existNumber);
System.out.println
//Borrar la lista
list.clear()
existNumber=0
//Al crear un nuevo objeto, el nombre de la variable es la aplicación al objeto (equivalente a la "dirección" del objeto)
//Usando este principio, probamos nuevamente p>
for( int i=0; ilt; TAMAÑO; i ){
Objeto obj = nuevo Objeto();
if(list.contains(obj)) {
System.out.println("Objeto: " obj "¡ya existe!"
existeNumber
}else
list.add(obj. toString());
}
System.out.println("El tamaño de la lista: " list.size()); p>
System.out .println("Número de elementos repetidos: " existNumber);
}
}
Los resultados de ejecución son los siguientes :
¡Objeto: java.lang.Object@922804 ya existe!
¡Objeto: java.lang.Object@e29820 ya existe!
Tamaño de lista: 9998
Número de elementos duplicados: 2
Tamaño de lista: 10000
Número de elementos repetidos: 0
Ver código fuente del objeto:
cadena pública toString() {
return getClass().getName() "@" Integer.to
HexString(hashCode());
}