Java中Integer和String浅谈

本文介绍了Java中基本数据类型及其对应的封装类,重点讲解了Integer类的构造方法及parseInt等实用方法,并探讨了String类的索引和截取操作。

 

Java中的基本数据类型有八种:intcharbooleanbytelongdoublefloatshortJava作为一种面向对象的编程语言,数据在Java中也是一种对象。我们用基本数据类型创建的对象,如 int x = 0;这里的x只有值这个属性,没有(或者很少)有其他的方法。这在一些需要对数据进行操作时变的很不方便,程序员需要自己编写很多代码去实现一些常用的功能,增加了工作量及程序的大小。

所以,Java中每种基本数据类型都有其对应的引用类,或者叫封装类。如int的引用类为Integerchar 的引用类为Character。这些类是在Java的编译环境中已经事先写好的类,类中已经写有大量的,针对该数据类型的常用的方法,并且这些方法是经过优化的。在编程时,我们只需要用这些类去创建对象,就可以直接调用相应的方法。有利就有弊,在创建这些类的对象时,所用的时间和空间是要比基本数据类型大,这就提高了程序的时间复杂度和空间复杂度,所以在应用时,如果不是十分必要,尽量还是使用基本数据类型。

下面,我主要介绍Integer类中的一些方法的使用。

谈到类,首先要说的就是对象的构造方法。Java中每个类都会有构造方法,用于在创建该类的对象时调用。如方法中没有对构造方法重写,则默认格式为:类名 对象名 = new 类名();重写后则根据所传参数调用对应方法。

Integer类中重写了两种构造方法。第一种为 Integerint value),传入一个int值作为对象的值,这个方法与语句:Integer 对象名 = (int)value等价。这种方法比较好理解,就不再举例。

第二种方法为Integer(String  s) 这个方法构造一个Integer 对象,它表示 String 参数所指示的int值。使用与 parseInt 方法(对基数为 10 的值)相同的方式将该字符串转换成int值。该方法在检测到异常,即当String s所包含的内容不是数字,或者不可解析的整数时,会抛出一个NumberFormatException

 

 

String s = "0101010"; 
Integer i = new Integer(s); 
System.out.println(i); 

 

  结果为:101010

 

 

String s = "dfadffcfa"; 
Integer i = new Integer(s); 
System.out.println(i); 

 

 Exception in thread "main" java.lang.NumberFormatException: For input string: "dfadffcfa"
 at java.lang.NumberFormatException.forInputString(Unknown Source)
 at java.lang.Integer.parseInt(Unknown Source)
 at java.lang.Integer.<init>(Unknown Source)

 

根据以上代码可知,这种构造方法不需要用try  catch或者throws来测试,因为该异常是Runtime型的异常,在程序运行时虚拟机会自动抛出。

 

接下来介绍几个最近在做文件压缩时用到的方法。

1、parseInt

在Integer类中,方法名为parseInt的方法有两个,所传参数不同(方法的重载)。只有一个Strirng传入的,即parseInt(String s)是将一个String中的字符进行十进制解析,返回一个static int。和上面提到的第二种构造方法一样,这个方法对于String中所含的字符也有要求,除了第一个字符可以是用来表示负值的 ASCII 减号 '-' ('\u002D') 外,字符串中的字符都必须是十进制数字。如果不符合要求,同样会在运行是报错,也是一个Runtime类型的异常。具体应用请看下面代码

 

String s = "11234516"; 
int i = Integer.parseInt(s); 
System.out.println(i);

 

输出结果为 11234516

 

String s = "112adf34516"; 
int i = Integer.parseInt(s); 
System.out.println(i);

 

Exception in thread "main" java.lang.NumberFormatException: For input string: "112adf34516"
 at java.lang.NumberFormatException.forInputString(Unknown Source)
 at java.lang.Integer.parseInt(Unknown Source)
 at java.lang.Integer.parseInt(Unknown Source) 

另一种parseInt需要传入String 和int两个参数,parseInt(String s, int radix),使用第二个参数指定的基数,将字符串参数解析为有符号的整数。除了第一个字符可以是用来表示负值的 ASCII 减号 '-' ('\u002D’)外,字符串中的字符必须都是指定基数的数字。这是一种将字符串数据按照某种进制进行转化的方法,当然前提条件是字符串中字符都满足进制的要求。

 

 

String s = "125ADF";
 int i = Integer.parseInt(s,16); 
System.out.println(i);

 

      输出结果:1202911

      异常情况就不再进行展示了。

      有将字符串转化为对应进制的整数的方法,也就有将整数按照进制转化为字符串的方法。

      toBinaryString、toOctalString、toHexString、toString都需要传入一个int,分别将该int的值转化为其二进制、八进制、十六进制、十进制的字符串,最高位不为0。

     

 

String s = Integer.toBinaryString(511); 
System.out.println(s);

 

      结果为:111111111

      以上几种方法就是在做Huffman编码的压缩时用到的Integer的方法,很有实用价值。

 

     除了这些基本数据类型的引用类型,我们最常接触到的有关数据操作的类就是String类。对于String型的数据,我们最常做的操作就是查找其中某个字符或者子字符串的索引位。这在String类中有很多的方法。Indexof(int char)返回的是指定字符在String中第一次出现的索引位,Indexof(int char,int fromIndex)则是从fromIndex位开始第一次出现char的索引位。lastIndexOf(int char)和lastIndexOf(int char,int fromIndex)正好相反,返回的是从尾到头的第一次出现的索引位。

 

 

String s = "adlfldcidfkasdcieij"; 
int index = s.indexOf("l"); 
int last = s.lastIndexOf("l"); 
System.out.println("index is :"+index); 
System.out.println("last is :"+last);

 

结果为:index is :2
          last is :4

       还经常会用到的操作就是截取字符串的某一段,得到新的字符串。String类中有substring的方法,同样也有重载现象存在。substring(int beginIndex)和substring(int beginIndex, int endIndex)得到的都是原字符串的子串,不过第一种是从beginIndex到原字符串尾,第二种则是从beginIndex到endIndex-1位的子串。这里就要注意,substring方法是含头不含尾的!

     

 

String s = "adlfldcidfkasdcieij"; 
String snew = s.substring(5); 
String str = s.substring(5,s.length()-1); 
System.out.println("snew is :"+snew); 
System.out.println("str is :"+str);

 

结果为:snew is :dcidfkasdcieij
            str is :dcidfkasdciei

 

请注意两个子串的区别。

 

 

以上就是我在压缩过程中涉及到的一些关于String类和Integer类中一些方法的使用,难免有点问题,欢迎指正。

 

<think>好的,我现在需要回答用户关于Java中将Integer转换为String问题。首先,我得回想一下用户之前的对话历史,看看有没有相关的信息可以借鉴。用户之前询问过CI/CD的概念,我详细解释了CICD的区别以及工具链,现在这个问题转向Java的基础类型转换,看起来用户可能在学习Java编程,需要具体的代码示例方法。 接下来,我需要确定用户的需求。用户问的是如何将Integer转换为String,在Java中这可能有几种不同的方法,比如使用Integer类的toString方法String.valueOf静态方法,或者通过字符串拼接的方式。此外,还要考虑自动拆箱的情况以及可能的NullPointerException风险,特别是当Integer对象为null时,不同的方法会有不同的处理方式。需要详细说明每种方法的用法注意事项,帮助用户理解哪种情况适合哪种方法。 然后,我需要组织回答的结构。用户可能希望得到一个清晰的步骤指南,包含不同的方法,每种方法的优缺点,以及示例代码。此外,用户可能对性能或最佳实践感兴趣,所以需要简要提及这些方面。比如,直接调用toString方法可能抛出异常,而String.valueOf则处理了null的情况,返回"null"字符串,这可能在某些情况下更安全。 还要考虑用户可能的疑惑点,比如为什么有的方法需要实例调用,有的则是静态方法,或者如何处理null值的问题。需要解释清楚每个方法的工作原理,比如Integer.toString(int)String.valueOf(int)的区别,以及当使用+运算符时Java是如何自动调用toString方法的。 另外,可能需要提到Java的自动装箱拆箱机制,特别是在使用字符串拼接时,Integer对象会被自动拆箱为int基本类型,然后转换为String。但如果是null的话,这里也会抛出异常,所以需要提醒用户注意处理可能的null值。 最后,总结部分要强调根据具体场景选择合适的方法,特别是处理null时的选择,比如使用String.valueOf更安全,或者需要处理异常时使用Optional类。这样用户可以根据自己的需求选择最合适的方法。 现在,需要将这些思考整理成一个结构清晰、分点明确的回答,确保每个方法都有示例代码,并指出注意事项适用场景,帮助用户全面理解不同的转换方式。</think>### JavaInteger转换为String的5种方法及注意事项 #### 1. **`Integer.toString()`方法** - **语法**:`String str = Integer.toString(intValue);` - **特点**: - 直接调用Integer类的静态方法 - 仅适用于**基本类型int**,若对象为null会抛出`NullPointerException` ```java int num = 123; String s1 = Integer.toString(num); // "123" Integer numObj = null; String s2 = Integer.toString(numObj); // ❌ 抛出NullPointerException ``` #### 2. **实例对象调用`toString()`** - **语法**:`String str = integerObj.toString();` - **特点**: - 要求对象**非null**(否则抛出异常) - 适用于Integer对象转换 ```java Integer num = 456; String s3 = num.toString(); // "456" Integer nullNum = null; String s4 = nullNum.toString(); // ❌ 运行时NullPointerException ``` #### 3. **`String.valueOf()`方法(推荐)** - **语法**:`String str = String.valueOf(intValue);` - **特点**: - 自动处理null值(返回"null"字符串) - 兼容基本类型intInteger对象 ```java Integer num = 789; String s5 = String.valueOf(num); // "789" String s6 = String.valueOf((Object)null); // "null" ``` #### 4. **字符串拼接隐式转换** - **语法**:`String str = "" + integerValue;` - **特点**: - 底层调用`StringBuilder`实现 - 自动触发`toString()`方法(若对象为null会抛出异常) ```java Integer num = 100; String s7 = "" + num; // "100" Integer nullNum = null; String s8 = "" + nullNum; // "null"(Java自动转换null为字符串) ``` #### 5. **`String.format()`格式化** - **语法**:`String str = String.format("%d", intValue);` - **特点**: - 支持复杂格式控制(如补零:`%04d`→"0123") - 性能略低于直接转换方法 ```java int num = 42; String s9 = String.format("数值:%d", num); // "数值:42" ``` --- ### 关键对比表 | 方法 | 支持null? | 输入类型 | 性能 | 典型用途 | |---------------------|-----------|----------------|------|--------------------| | `Integer.toString()`| ❌ | int基本类型 | 高 | 确定非null的int值 | | `numObj.toString()` | ❌ | Integer对象 | 高 | 确保对象非null时 | | `String.valueOf()` | ✅ | 两者皆可 | 中 | 安全处理可能的null | | 字符串拼接 | ✅ | 两者皆可 | 低 | 快速简单转换 | | `String.format()` | ✅ | 两者皆可 | 低 | 需要格式化时 | --- ### 最佳实践建议 1. **优先选择`String.valueOf()`** - 避免NullPointerException风险 - 示例:`String str = String.valueOf(userInput);` 2. **处理null的特殊需求** - 需要自定义null的显示值时: ```java Integer num = getNullableNumber(); String str = (num != null) ? num.toString() : "N/A"; ``` 3. **数值格式化场景** - 使用`DecimalFormat`进行复杂转换: ```java Integer price = 9999; String formatted = new DecimalFormat("¥#,###").format(price); // "¥9,999" ``` 4. **Java 8+的Optional处理** ```java Optional.ofNullable(num) .map(Object::toString) .orElse("default"); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值