黑马程序员技术交流社区

标题: 字符串转换成其他数据类型的问题 [打印本页]

作者: lily    时间: 2011-9-3 17:24
标题: 字符串转换成其他数据类型的问题
字符串转化成其他数据的方法有:
1、转化为boolean型: Boolean("true").booleanValue();
2、转化为int 型:    Integer.ParseInt("123");
2、转化为float 型:  Float.parseFloat("345.23");

但是以下程序中,为什么转化为boolean型,需要在方法前加new,而转化为其他类型不能加new呢?

import java.io.*;
public class test {

    public static void main(String [] args) throws IOException
    {
            InputStreamReader iin=new InputStreamReader(System.in);
            BufferedReader bin=new BufferedReader(iin);
            String s;
            float f;
            int i;
            boolean b;
            System.out.println("输入任意字符串");
            s=bin.readLine();
            System.out.println("输入浮点数");
            f=Float.parseFloat(bin.readLine());
            System.out.println("输入整数");
            i=Integer.parseInt(bin.readLine());
            System.out.println("输入布尔量");
            b=new Boolean(bin.readLine()).booleanValue();
            System.out.println("输入的字符串"+s);
            System.out.println("输入的浮点数"+f);
            System.out.println("输入的整数"+i);
            System.out.println("输入的布尔量"+b);
    }
   
   
}
作者: 李叶    时间: 2011-9-3 17:41
呵呵,要弄懂这个问题,你首先要弄明白静态方法和非静态方法的区别
用一句最简单的话说,它们的主要区别有两点:
1、静态方法就是前面有static修饰的方法;非静态方法就是前面没有static修饰的方法
2、静态方法可以直接用类名.方法名()的方式调用,也只能以类名.方法名的方式调用
而非静态方法必须先创建对象,然后以对象.方法名()的方式调用
(在这里为了简单起见,我就不讲解类和对象的关系以及static的实现原理了呵呵)

所以,现在看一下你的代码吧:[code=java]System.out.println("输入整数");
i=Integer.parseInt(bin.readLine());
System.out.println("输入布尔量");
b=new Boolean(bin.readLine()).booleanValue(); [/code]在第2行和第4行中我们可以看到
你在获取一个Integer类型的值的时候,你是通过parseInt()方法来获取的
而你在获取一个Boolean类型的值的时候,你是通过booleanValue()方法来获取的
但是由于parseInt()和booleanValue()这样的方法都是由JAVA的类自己提供的
那么你怎么知道它们里面的方法哪些是静态方法,哪些是非静态方法呢?
答案很简单:去查阅API,在API中会把每个类中的每个方法解释的非常清楚

通过查阅API我们可以知道,
Integer类中的parseInt()方法是个静态方法
而Boolean类中的booleanValue()方法是个非静态方法

所以,在你使用parseInt()方法的时候,你就可以直接使用Integer.parseInt()来使用
而你在使用booleanValue()方法的时候,你必须要先创建出一个Boolean的对象
也就是new Boolean()之后,才可以调用这个对象的booleanValue()方法

以上的讲解对很多知识点都没有展开解释,如果你还有对哪里不懂的话,就继续提出来吧~
[ 本帖最后由 李叶 于 2011-09-03  17:47 编辑 ]
作者: 匿名    时间: 2011-9-3 17:43
标题: 回复 楼主 的帖子
方法没用对啊,
b = Boolean.valueOf(bin.readLine());
这个就不用new
作者: 匿名    时间: 2011-9-3 18:01
[quote] 原帖由 [i]李叶[/i] 于 2011-09-03 17:41 发表 [url=http://bbs.itheima.com/redirect.jsp?goto=findpost&pid=8836&ptid=1361][img]http://bbs.itheima.com/images/common/back.gif[/img][/url]呵呵,要弄懂这个问题,你首先要弄明白静态方法和非静态方法的区别
用一句最简单的话说,它们的主要区别有两点:
1、静态方法就是前面有static修饰的方法;非静态方法就是前面没有static修饰的方法
2、静态方法可以直接用类名.方法名()的方式调用,也只能以类名.方法名的方式调用
而非静态方法必须先创建对象,然后以对象.方法名()的方式调用
(在这里为了简单起见,我就不讲解类和对象的关系以及static的实现原理了呵呵)

所以,现在看一下你的代码吧:System.out.println("输入整数");
i=Integer.parseInt(bin.readLine());
System.out.println("输入布尔量");
b=new Boolean(bin.readLine()).booleanValue(); 在第2行和第4行中我们可以看到
你在获取一个Integer类型的值的时候,你是通过parseInt()方法来获取的
而你在获取一个Boolean类型的值的时候,你是通过booleanValue()方法来获取的
但是由于parseInt()和booleanValue()这样的方法都是由JAVA的类自己提供的
那么你怎么知道它们里面的方法哪些是静态方法,哪些是非静态方法呢?
答案很简单:去查阅API,在API中会把每个类中的每个方法解释的非常清楚

通过查阅API我们可以知道,
Integer类中的parseInt()方法是个静态方法
而Boolean类中的booleanValue()方法是个非静态方法

所以,在你使用parseInt()方法的时候,你就可以直接使用Integer.parseInt()来使用
而你在使用booleanValue()方法的时候,你必须要先创建出一个Boolean的对象
也就是new Boolean()之后,才可以调用这个对象的booleanValue()方法

以上的讲解对很多知识点都没有展开解释,如果你还有对哪里不懂的话,就继续提出来吧~ [/quote]
已经很详细了,谢谢,受教了。
作者: 匿名    时间: 2011-9-3 18:02
[quote] 原帖由 [i]李治[/i] 于 2011-09-03 17:43 发表 [url=http://bbs.itheima.com/redirect.jsp?goto=findpost&pid=8837&ptid=1361][img]http://bbs.itheima.com/images/common/back.gif[/img][/url]方法没用对啊,
b = Boolean.valueOf(bin.readLine());
这个就不用new [/quote]
貌似这个方法用在这里报错,识别不了valueOf()方法
作者: 匿名    时间: 2011-9-3 18:17
标题: 回复 报纸 的帖子
什么情况啊,怎么报错
作者: 匿名    时间: 2011-9-3 18:19
static Boolean valueOf(boolean b)
          返回一个表示指定 boolean 值的 Boolean 实例

这个方法的参数是一个boolean值,可是从命令行输入的都是以字符串处理的,所以这个方法这样用是不行的
作者: 匿名    时间: 2011-9-3 18:25
标题: 回复 7 # 的帖子
public static Boolean valueOf(String s)返回一个用指定的字符串表示值的 Boolean 值。如果字符串参数不为 null 且在忽略大小写时等于 "true",则返回的 Boolean 表示 true 值。
你没看重载方法?
作者: 匿名    时间: 2011-9-3 18:54
valueOf有2种参数形式的,从参数形式来看是应该没错,但是编译的话 报错
I:\test.java:28: incompatible types
found   : java.lang.Boolean
required: boolean
        b=Boolean.valueOf("123");
说是不兼容的形式
作者: 匿名    时间: 2011-9-3 20:26
标题: 回复 9 # 的帖子
boolean类型,当然只能是true,或者false了
作者: 匿名    时间: 2011-9-3 21:06
[quote] 原帖由 [i]李治[/i] 于 2011-09-03 20:26 发表 [url=http://bbs.itheima.com/redirect.jsp?goto=findpost&pid=8854&ptid=1361][img]http://bbs.itheima.com/images/common/back.gif[/img][/url]boolean类型,当然只能是true,或者false了 [/quote]
这个函数是允许接受String类型的阿 ,再说了我本来就是要把String的类型转化为boolean类型,如果直接输入boolean,就没有必要转化了 。如果输入true,或者false的String形式也是不行的,再者就是如果用b=new Boolean(bin.readLine()).booleanValue();即使不输入输入true,或者false的String形式,也是可以运行的,只是结果是false .
作者: 匿名    时间: 2011-9-3 21:53
标题: 回复 11 # 的帖子
我说的true或者false就是字符串形式,既然不输入true,或者false的String形式,也是可以运行的,只是结果是false ,那你要的就是b = Boolean.parseBoolean(bin.readLine());
这个方法了。
作者: 匿名    时间: 2011-9-3 22:46
哦,没有找到这个方法




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2