A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lily 黑马帝   /  2011-9-3 17:24  /  3192 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

字符串转化成其他数据的方法有:
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);
    }
   
   
}

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

12 个回复

倒序浏览
呵呵,要弄懂这个问题,你首先要弄明白静态方法和非静态方法的区别
用一句最简单的话说,它们的主要区别有两点:
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 编辑 ]

评分

参与人数 1技术分 +2 收起 理由
wangfayin + 2 每次都这么棒!

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-3 17:43:27
藤椅

回复 楼主 的帖子

方法没用对啊,
b = Boolean.valueOf(bin.readLine());
这个就不用new
回复 使用道具 举报
黑马网友  发表于 2011-9-3 18:01:12
板凳
[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:33
报纸
[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:01
地板

回复 报纸 的帖子

什么情况啊,怎么报错
回复 使用道具 举报
黑马网友  发表于 2011-9-3 18:19:57
7#
static Boolean valueOf(boolean b)
          返回一个表示指定 boolean 值的 Boolean 实例

这个方法的参数是一个boolean值,可是从命令行输入的都是以字符串处理的,所以这个方法这样用是不行的
回复 使用道具 举报
黑马网友  发表于 2011-9-3 18:25:05
8#

回复 7 # 的帖子

public static Boolean valueOf(String s)返回一个用指定的字符串表示值的 Boolean 值。如果字符串参数不为 null 且在忽略大小写时等于 "true",则返回的 Boolean 表示 true 值。
你没看重载方法?
回复 使用道具 举报
黑马网友  发表于 2011-9-3 18:54:11
9#
valueOf有2种参数形式的,从参数形式来看是应该没错,但是编译的话 报错
I:\test.java:28: incompatible types
found   : java.lang.Boolean
required: boolean
        b=Boolean.valueOf("123");
说是不兼容的形式
回复 使用道具 举报
黑马网友  发表于 2011-9-3 20:26:17
10#

回复 9 # 的帖子

boolean类型,当然只能是true,或者false了
回复 使用道具 举报
黑马网友  发表于 2011-9-3 21:06:53
11#
[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:35
12#

回复 11 # 的帖子

我说的true或者false就是字符串形式,既然不输入true,或者false的String形式,也是可以运行的,只是结果是false ,那你要的就是b = Boolean.parseBoolean(bin.readLine());
这个方法了。
回复 使用道具 举报
黑马网友  发表于 2011-9-3 22:46:32
13#
哦,没有找到这个方法
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马