简单介绍:
1、toString,需要保证调用这个方法的类、方法、变量不为null,否则会报空指针。
2、String.valueOf。这个方法在使用的时候是有些特殊的。一般情况下,如果是确定类型的null传入,返回的是字符串“null”,而如果直接传入null,则会发生错误。
3、(String) 字符串类型强转。需要保证的是类型可以转成String类型。
这里重点介绍valueOf。
举个例子:
String teString=null;
teString=String.valueOf(teString);
System.out.println(teString);
这样的写法,因为确定了传入的是String类型,在valueOf调用对应构造函数时不会发生错误,因此,返回的是字符串“null”。
String.valueOf(null);
但如果改为以上的写法,则提示空指针。
问题分析:为何会出现以上两种不同的结果,看源码我们即可知道原因。
valueOf有以下几种重载:
在代码中写下如下:
boolean temp = false;
String.valueOf(temp);
char temp1 = 0;
String.valueOf(temp1);
double value = 0;
String.valueOf(value);
Object object=null;
String.valueOf(object);
float f = 0;
String.valueOf(f);
int i = 0;
String.valueOf(i);
long l = 0;
String.valueOf(l);
System.out.println("------------分割线---------------");
//导致空指针
char[] chars=null;
String.valueOf(chars);
//导致空指针
String.valueOf(null, 0, 0);
运行后,可看到导致空指针的只可能是后面的两种方式。源码中valueOf(char[])会最终走到valueOf(char[],int,int)这个重载中,因此我们直接看对应的源码,如下:
public String(char[] data, int offset, int charCount) {
if ((offset | charCount) < 0 || charCount > data.length - offset) {
throw failedBoundsCheck(data.length, offset, charCount);
this.offset = 0;
this.value = new char[charCount];
this.count = charCount;
System.arraycopy(data, offset, value, 0, count);
}
这里将导致空指针。
知道了导致空指针的原因,还有一个疑惑,那就是为什么String.valueOf(null),会走到valueOf(char[])这个重载,而不是其他重载呢?
因为java中对重载的匹配是,当重载都能匹配的时候,优先选择范围小,精度高的方法,因此,它自动重载了char[]这个方法。
通过以上,发现String.valueOf()方法是有可能出现null的。在使用时需要注意。
字符串类型的转型在java中常用的方法有标题中的三种。简单介绍:1、toString,需要保证调用这个方法的类、方法、变量不为null,否则会报空指针。2、String.valueOf。这个方法在使用的时候是有些特殊的。一般情况下,如果是确定类型的null传入,返回的是字符串“null”,而如果直接传入null,则会发生错误。3、(String) 字符串类型强转。需要保证的
文章目录(
String
)强转
toString
()
String
.
valueOf
(),推荐使用,返回字符串“null”尾语
(
String
)强转
(
String
)强转,简单方便,效率高, 是标准的类型转换
缺点:只能是强转原本就是字符串的东西,如果原本不是字符串的话,那么就会报错
看下面这个例子:
int aaa = 0;
String
str3 = (
String
)aaa;//这行代码会报错,编译不过
String
str4 = aaa.
toString
();//会提示没有.
toString
()方法
在开发中,经
常
看到好多同事转字符串用
toString
()方法,这个方法看似用起来简单,但是用不好也很容易埋雷。我在开发中就改过类似的很多个bug,都是
toString
()方法使用不当引起的。
1.容易引起NullPointException()异
常
一、
valueOf
()【1】undefined和null没有
valueOf
()方法undefined.
valueOf
();//错误
null.
valueOf
();//错误 【2】布尔型数据true和false返回原值。布尔型数据的包装对象返回true或falsetrue.
valueOf
();//true
typeof true.
valueOf
();//'boolean'
false.
valueOf
...
(
String
)
这是标准的类型转换,将对象强制转换为
String
类型,前提是该对象必须能保证转成
String
类型,否则将抛出ClassCastException异
常
toString
API源码
由于在项目中,出现
String
类型转换的问题,我在网上查了一下,然后总结了一下。
1、(
String
)
这是标准的类型转换,将object转成
String
类型的值。使用这种方法时,需特别小心的是因定义为 Object 类型的对象在转成
String
时语法检查并不会报错,这将可能导致潜在的错误存在。这时要格外小心。
例: Object obj = new Integer(1...
在实际开发中,少不了使用这三种方法对某一个类型的数据进行转
String
的操作,那么什么情况下使用哪种方法更快捷,以及这些方法使用时的一些注意事项都有哪些呢?这篇文章参考自《掘金》上大佬的头条三面:
toString
()、
String
.
valueOf
、(
String
)强转,有啥区别? - 掘金 ,来叙述一下这三种方法的使用场景。废话少说,直接上代码!
一、基本类型转换
1.
toString
()
基本类型是没有
toString
() 方法的
2.
String
.
valueOf
()
基本类型转.
string
.
valueOf
()方法和
toString
()方法都是将一个对象转换为字符串的方法。
string
.
valueOf
()方法接受一个参数并返回一个字符串,这个参数可以是任何对象类型,包括数字、字符、布尔值等等。如果参数是null,则返回字符串“null”。
ToString
()方法也是将一个对象转换为字符串的方法,但是它是在
java
.lang.Object类中定义的。因此,所有的
Java
类都继承了
toString
()方法,包括
String
类。
ToString
()方法可以被覆盖,使得每个类都可以自己定义如何将自己转换为字符串。
总的来说,
string
.
valueOf
()方法是用于简单的转换一个对象为字符串,而
toString
()方法是更加
常
用且高级的方式,因为它可以被自定义覆盖,让每个类都可以自定义转换方式来适应自己的特点和需要。