java 中的valueOf方法和强转

case1:Object 对象转String

需要强调的是String.valueOf()方法,当参数为类型是object,且值时null的时候他的处理方式

public static String valueOf(Object obj) {
        return (obj == null) ? "null" : obj.toString();
    }

这样在后面的成都不会报错但是在逻辑上可能出错,一般习惯写的是str!=null && str.length()>0

当是由 str = String.valueOf(obj)得到时上面的额判断条件就有问题了

所以遇到 Object 对象转String 最好强转 str=  (String) obj此时,当obj为null时,str依然为null

case2:Object 装基本类型的包装类型,(关注integer和Long,Double)

首先 obj被赋值之后 obj还是属于数据所属基本类型的包装类型可以通过instanceOf 判断知道.

所以直接用强转就可以,没有必要用类似Long.ParseLong(String.valueOf(obj))这类方法,用这中复杂的问题会有一个问题就是不能返回值不能包含null

如果是null就直接抛出异常了,因为在String.valueOf()方法时已经把null转为字符串了,而Long.parseLong()方法如果传入了null字符串就会报异常,

Long.ParseLong(String.valueOf(obj)) 方法就等价与 (long)obj,用基本类型去强转

更好的做法是用(Long)obj去强转,在后面的程序中做null情况的判断和处理

case3: 基本类型的包装类型和String的vlaueOf方法对与obj=null的处理是不一样的,String.valueOf(obj)的处理返回的"null"字符串,而基本类型的包装类型返回的null

强调一下,String不是基本类型,更不是基本包装类型

总结:1遇到obj类型转string时最好强转

2遇到obj类型转几倍类型的包装类型时最好强转,如果需要可以先用instanceOf判断其类型时再强转

时间: 2024-08-08 13:57:36

java 中的valueOf方法和强转的相关文章

Java中String.valueOf()方法的解释

1. 由 基本数据型态转换成 String String 类别中已经提供了将基本数据型态转换成 String 的 static 方法 也就是 String.valueOf() 这个参数多载的方法 有下列几种 String.valueOf(boolean b) : 将 boolean 变量 b 转换成字符串 String.valueOf(char c) : 将 char 变量 c 转换成字符串 String.valueOf(char[] data) : 将 char 数组 data 转换成字符串 

Java中的toString()方法

Java中的toString()方法 目录 1.????对象的toString方法 2.????基本类型的toString方法 3.????数组的toString方法 4.????参考文献 ? ? 对象的toString方法 在JDK API中对Object对象的toString方法说明如下: toString : public String toString() 返回该对象的字符串表示.通常,toString 方法会返回一个"以文本方式表示"此对象的字符串.结果应是一个简明但易于读懂

java中‘==’和‘equals()’方法的有趣探索

这两天在看周志明的<深入理解java虚拟机>,受益颇多,根据书中的启示,对java中'=='和'equals()'方法的区别做了一些探索. 首先,为了更快地让进入状态,我们先来所几个判断题,例程如下,请判断各个System.out.println()输出的结果. <pre name="code" class="java"> public static void main(String[] args) { Integer a =1; Integ

浅谈Java中的hashCode方法

哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率.在Java的Object类中有一个方法: public native int hashCode(); 根据这个方法的声明可知,该方法返回一个int类型的数值,并且是本地方法,因此在Object类中并没有给出具体的实现. 为何Object类需要这样一个方法?它有什么作用呢?今天我们就来具体探讨一下hashCode方法. 一.hashCode方法的作用 对于包含容器类型的程序设计语言来说,基本上都会涉及到has

Java中的main()方法详解

在Java中,main()方法是Java应用程序的入口方法,也就是说,程序在运行的时候,第一个执行的方法就是main()方法,这个方法和其他的方法有很大的不同,比如方法的名字必须是main,方法必须是public static void 类型的,方法必须接收一个字符串数组的参数等等. 在看Java中的main()方法之前,先看一个最简单的Java应用程序HelloWorld,我将通过这个例子说明Java类中main()方法的奥秘,程序的代码如下: 1 /** 2 * Java中的main()方法

java中构造方法和方法全面解析

java中构造方法和方法全面解析 我相信大多说人都对构造方法.方法不陌生,而且很了解,但我也相信有很多像我这样的没有一个很好很清晰很全面的认识,今天就把它整理如下,希望能给大家带来点方便与帮助,也希望大家多多讨论.          构造方法和方法的区别: 构造方法要与类名相同,无返回类型,在类初始化的时候调用.      方法最好与类名不同,对象调用,静态方法可用类名.方法(). 构造器和方法在下面三个方面区别:修饰符,返回值,命名. 1.和方法一样,构造器可以有任何访问的修饰: public

JAVA中的finalize()方法

[转]JAVA中的finalize()方法 今天早上看Thinking in java的[第四章 初始化和清除].[  清除:终结和垃圾回收]的时候, 看到了这个东西. 用于清理滴... 当然,这个方法来自java.lang.Object finalize()方法的重写 权限(Access)需要是protected或者是public ,不能是private finalize()方法不需要显示地调用, 在垃圾回收(GC)时会被自动先行调用的. 据我测试,需要显示地调用垃圾回收方法(System.g

千万不要误用 java 中的 HashCode 方法

刚才debug追堆栈的时候发现一个很奇怪的问题 我用IE8和Google的浏览器访问同一个地址 Action的 scope="session" 也设置了 而且两个浏览器提交的参数map也是互相独立的 不过很奇怪的一个 两个Action对象的hashmap是不同的但是它们的对象变量 paraterMap 的 哈希值 居然是一个 我大不解!( 找到原因以后发现这个问题其实只是一个好多年没有再提起的基础问题 ) 不过发现确实有朋友在网上说这个问题曾经引发过bug Java中的hashCode

浅谈Java中的hashcode方法 - 海 子

浅谈Java中的hashcode方法 哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率.在Java的Object类中有一个方法: public native int hashCode(); 根据这个方法的声明可知,该方法返回一个int类型的数值,并且是本地方法,因此在Object类中并没有给出具体的实现. 为何Object类需要这样一个方法?它有什么作用呢?今天我们就来具体探讨一下hashCode方法. 一.hashCode方法的作用 对于包含容器类型的程