Number调用toString()方法产生的问题

转载地址  http://www.zuojj.com/archives/888.html


为什么会写此篇文章,其原因是前段时间有人问过我一个问题20.toString()的结果是多少?如果你是一个新手,看到这个问题,第一想到的结果应该是“20”,但是结果却和我们想的不相符,看一下几个例子:

//Outputs: "/abc/"
console.log(/abc/.toString());

//Outputs: "true"
console.log(true.toString());

//Outputs: "20.3"
console.log(20.3.toString());

//Outputs: Uncaught SyntaxError: Unexpected token ILLEGAL 
console.log(20.toString());

从上例结果可以看出Outputs3可以正常输出,Outputs4却报错。到底是何原因呢?究其原因还是“.”号的原因。当20.toString()的时候,这个“.”是不明确的,是小数点符号,还是通过“.”来调用方法即对象成员访问。因为没有20.toString这样的浮点数,所以才会报错。而20.3.toString(),第一个点被解释成浮点数的小数点,第二个点被解释成对象访问,所以没有报错。

那么我们如何来解决这个问题呢?有如下几种方式:

//方式一:
console.log(20..toString());

//Ouputs: 20
console.log(20.);

//方式二:
console.log(20 .toString());

//方式三:
console.log((20).toString());

//方式四:
console.log(20["toString"]());

综合以上几种方式,
方式一:等价于20.0.toString()。
方式二:因为浮点数中数字和点之间不会有空格,所以此处不会再把这个点当成浮点数的点来解析了。
方式三:个人比较推崇。加个括号确保解析器解析时不会混淆。
方式四:看起来比较别扭。



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要改变一个对象的toString方法,可以重写该对象的toString方法。在重写方法中,可以按照自己的需求来定义返回字符串的格式。例如,以下是一个示例代码,用于改变一个Person对象的toString方法: ``` public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } // 重写toString方法 @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; } } ``` 在上述代码中,我们重写了Person对象的toString方法,返回了一个包含对象属性的字符串。在实际使用中,可以根据自己的需求来定义返回的字符串格式。 ### 回答2: toString方法用于返回一个对象的字符串表示形式。默认情况下,toString方法返回对象的类名和哈希码。然而,我们可以通过重写这个方法来返回我们期望的字符串形式。 要改写toString方法,我们可以采取以下步骤: 1. 首先,我们需要决定我们希望toString方法返回的内容。可以根据对象的属性和状态来确定返回值。比如,一个学生对象可以返回学生的姓名、年龄和学号等信息。 2. 在对象的类中,重新定义toString方法,并使用@Override注解确保正确地重写了父类的toString方法。 3. 在toString方法内部,创建一个字符串构建器(StringBuilder),用于构建返回的字符串。 4. 将对象的属性和状态添加到字符串构建器中,可以使用字符串拼接符号(+)或StringBuilder的append方法。 5. 最后,使用toString方法返回字符串构建器的结果。 下面是一个示例: ``` public class Student { private String name; private int age; private String studentNumber; // 构造方法和其他方法省略 @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("姓名:").append(name).append(","); sb.append("年龄:").append(age).append(","); sb.append("学号:").append(studentNumber); return sb.toString(); } } ``` 在上述示例中,我们重写了Student类的toString方法,返回了学生的姓名、年龄和学号。当我们调用一个Student对象的toString方法时,将返回类似于"姓名:张三,年龄:18,学号:20210001"的字符串。 ### 回答3: toString方法是Java中Object类的一个方法,用于将一个对象转换成字符串表示形式。默认情况下,toString方法返回的字符串是该对象的类名,加上“@”符号和该对象的哈希码。 如果想要修改toString方法的输出结果,可以在自定义类中重写该方法。以下是如何改进toString方法的一些方式: 1. 返回有意义的字符串描述:在重写toString方法时,可以根据对象的属性值生成一个有意义的字符串描述。例如,如果有一个Person类,可以在toString方法中返回该人的姓名、年龄和性别等信息。 2. 使用StringBuilder类:为了提高性能,可以使用StringBuilder类来构建toString方法的结果字符串。通过将属性值逐个添加到StringBuilder对象中,可以减少字符串的拼接次数。 3. 调用父类的toString方法:在子类中重写toString方法时,可以先调用父类的toString方法,然后在其基础上添加额外的信息。这样可以保留父类的默认字符串表示形式,并在此基础上进行修改。 4. 使用格式化工具类:可以使用Java提供的格式化工具类,如String.format()或MessageFormat类,来格式化toString方法的输出结果。这可以方便地指定字符串的格式,如日期格式、小数点保留位数等。 总之,通过重写toString方法,我们可以根据实际需求返回对象的任意字符串表达形式。这样可以提高代码可读性,方便调试和输出对象的信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值