关于字符数组cs.toString和new String(cs)的问题

做Leetcode,345. Reverse Vowels of a String

思路完全正确,结果却一直不对

System.out.print(cs.toString);

还是奇奇怪怪的结果

像:[[email protected]或者[[email protected]等等

改成 System.out.print(new String(cs));就对了

首先:明确toString()是Object类的方法,所以所有类创建的时候都有这个方法并能够调用

同时:java输出用的函数print();是不接受对象直接输出的,只接受字符串或者数字之类的输出。

当System.out.print(XXXX); 当XXXX不是字符串或者数字的时候,此时可以编译成功,

但是运行时因为不满足条件,就会去调用这个对象类里面的toString 方法,输出结果为[类型@哈希值]

所以,不管有没有XXX.toString(),何况还特意toString()了

看一下Object里面toString()源码

public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

正如前面出现的问题,由于数组类中没有对此方法重写(override),仅仅是重载(overload)为类的静态方法(参见java.util.Arrays)。

所以,数组直接使用toString()的结果也是[类型@哈希值]。

****最终****

三种方式数组转化字符串

char[] cs={‘a‘,‘b‘,‘c‘,‘d‘};
Array.toString(cs);-------这种是[a,b,d,d]这种格式的

String.valueOf(cs);
String str=new String(cs);
---------这种就是很正常的 abcd 的了
时间: 2024-11-08 03:52:49

关于字符数组cs.toString和new String(cs)的问题的相关文章

使用字符数组保存密码, 比使用String保存密码更好

在Java 中, 使用字符数组保存密码 比使用String保存密码更好. 两点理由 : 很难从内存中清除. String 属于不可变对象, 他会被放到串缓冲池中以方便重复使用,所以它就可能在内存中被保留很长时间. 这时任何能够访问内存的人, 都可以很容易看到明文密码 当然, 根本就不应该使用明文密码 Java 提供 JPasswordField组件的getPassword()方法 这是特意为密码准备的, 不用吗? 不要偷懒 在你不知道的时刻, 可能被泄露到其他地方 比如日志中. 2018年5月

C与C++中的字符数组char*和字符串string的相互转化

1. 将字符数组char[]转化为字符串string char ch [] = "ABCDEFG"; string str(ch);//也可string str = ch; //或者 char ch [] = "ABCDEFG"; string str; str = ch;//在原有基础上添加可以用str += ch; 2. 将字符串string转化为字符数组char[] char buf[10]; string str("ABCDEFG");

字符串和字符数组之间的转换

package String; /* * 写了一个字符串和字符数组之间转换的例子 * 总结:将字符串转变为字符数组 :public char[] toCharArray() * 直接将一个字符数组变成一个字符串 public String (char[] value) 这个是构造函数啊,可以直接new 并为属性赋值啊. */ public class StringDemo2 { public static void main(String[] args) { String s = "hellow

C++中字符数组和字符串string

字符数组 C++中字符数组用char str[]可以用来表示一个字符串. (1)   数组的大小和字符串的长度. 数组的大小一定要大于字符串的长度,因为系统会自动补上一个'\0'作为字符串的结束标志.当然对于未初始化的也补'\0'. #include <iostream> #include <string> using namespace std; int main() { char str[11] = "I am happy"; // 系统会自动补上'\0'空

对比c++中的string与c中的字符数组的构造和初始化

string类的构造函数: string(const char *s);    //用c字符串s初始化string(int n,char c);     //用n个字符c初始化此外,string类还支持默认构造函数和复制构造函数,如string s1:string s2="hello":都是正确的写法.当构造的string太长而无法表达时会抛出length_error异常 : 关于c中的字符数组: 请参考: http://blog.csdn.net/wangrunmin/article

关于C中字符数组,字符指针以及C++中string类型的两两转换及排序

// practise.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <string.h> #include <string> #include <algorithm> #include <iostream> using namespace std; int main() { /* 字符串转字符数组,使用strncpy_s(),比strncpy()安全*/ string str

通过String获取字符数组

方法一: public void getChars(int start,int end,char c[],int offset) 作用是将当前字符串从start到end-1位置上的字符复制到字符数组c中,并从c的offset处开始存放 方法二: String类中toCharArray()方法的用法

C++中字符数组与string的相互转换

字符数组转化成string类型char ch [] = "ABCDEFG";string str(ch);//也可string str = ch;或者char ch [] = "ABCDEFG";string str;str = ch;//在原有基础上添加可以用str += ch; 将string类型转换为字符数组char buf[10];string str("ABCDEFG");length = str.copy(buf, 9);buf[le

字符数组和string判断是否为空行 NULL和0 namespace变量需要自己进行初始化

string 可以这样判断空行input !="" 字符数组可以通过判断第一个元素是否为空字符'\0',是的话为空行arrar[0]=='\0':或者用长度strlen(char arrar)==0特别注意这两个arrar[0]==0:arrar[0]==NULL:因为指向了空指针,空指针指向NULL,NULL在VS这个IDE上,代表0,所以上述成立 NULL用于指针和对象,0用于数值 在不同的系统中,NULL并非总是和0等同,NULL仅仅代表空值,也就是指向一个不被使用的地址,在大多