场景:通过文本框获得用户输入的数字数据,因为文本框里面是书写文本数据的,所以后台得到的都是字符串。如果想要对字符串中的数字进行运算,必须将字符串转换成数字。
java语言属于一种面向对象的语言,会把真实存在的事物或信息都会进行描述并封装为类。
在java中存在8种基本数据类型,而java语言也把这8种基本数据类型进行了封装。称为:包装类。
学习Java语法基础的时候,我们知道Java中有8种基本数据类型,这些数据类型可以在内存中开辟出对应类型的空间,然后可以保存对应类型的数据。
8种基本数据类型,它们仅仅只能规定空间的类型,而我们不能使用面向对象的方式去使用8种基本类型创建对象(new int();不能这样去创建基本类型的对象)。
由于8种基本类型不能像类类型一样去new对象,于是Java就对每种基本类型给出了一个对应的类类型。
而java语言也把这8种基本数据类型进行了封装。称为:包装类。
基本类型 | 对应的包装类(位于java.lang包中) |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
装箱与拆箱
-
装箱:从基本类型转换为对应的包装类对象。int----》Integer
-
拆箱:从包装类对象转换为对应的基本类型。Integer----》int
用Integer与 int为例:
基本数值---->包装对象
Integer i1 = new Integer(4);//使用构造函数
Integer i2 = Integer.valueOf(4);//使用包装类中的valueOf方法
包装对象---->基本数值
int num = i.intValue();
自动装箱与自动拆箱
自动装箱:可以直接把一个基本类型的数据赋值给自己对应的包装类型。
自动拆箱:可以直接把一个包装类型的数据赋值给自己对应的基本类型。
Integer i = 4;//自动装箱。相当于Integer i = Integer.valueOf(4);
int j = i + 5;//等号右边:将i对象转成基本数值(自动拆箱) i.intValue() + 5;
//加法运算完成后,再次装箱,把基本数值转成对象。
package com.web;
public class Test44 {
public static void main(String[] args) {
//基本数值---->包装对象
Boolean bool = Boolean.valueOf(true);
Integer i = Integer.valueOf(4);
Character c = Character.valueOf('c');//c = c
Character c1 = Character.valueOf((char) 98);//c1 = b
Byte b = Byte.valueOf((byte) 98);//b = 98
//Byte b1 = Byte.valueOf("b");//Exception in thread "main" java.lang.NumberFormatException: For input string: "b"
Float f = Float.valueOf((float) 1.2);
Double d = Double.valueOf(1.2);
Long l = Long.valueOf((long) 1.2);
Short s = Short.valueOf((short) 12);
//包装对象---->基本数值
int i1 = i.intValue();
boolean b1 = bool.booleanValue();
char c2 = c.charValue();
char c3 = c1.charValue();
byte b2 = b.byteValue();
float f1 = f.floatValue();
double d1 = d.doubleValue();
long l2 = l.longValue();
short s2 = s.shortValue();
//自动装箱
Boolean bool2 = true;
Integer i2 = 1;
Character c4 = 'c';
Byte b3 = 23;
Float f2 = 1.2f;
Double d2 = 1.2;
Short s3 = 2;
Long l3 = 2L;
//自动拆箱
boolean bool3 = bool2;
int i3 = i2;
char c5 = c4;
byte b4 = b3;
float f3 = f2;
double d3 = d2;
short s4 = s3;
long l4 = l3;
}
}
基本类型与字符串之间的转换
基本类型转字符串
1、可以直接使用+号
2、使用String类中的valueOf
static String valueOf(int i)返回 int
参数的字符串表示形式。
3、使用对应的包装类中重载的toString方法
static String toString(int i)返回表示指定整数的 String
对象。
public class Demo01 {
public static void main(String[] args) {
//使用+完成基本数据类型到字符串的转换
int x=123;
String s=x+"";
//输出
System.out.println("s = " + s);
//使用String类中的valueOf方法
String s1 = String.valueOf(1.23);
//输出
System.out.println("s1 = " + s1);
//使用包装类中的方法将基本类型数据转换为字符串
String s2 = Double.toString(1.2);
//输出
System.out.println("s2 = " + s2);
}
}
字符串转换成对应的基本类型
字符串转成基本类型使用包装类中的parseXxxx方法。
public static int parseInt(String s):将字符串参数转换为对应的int基本类型。
注意:
1)后期学习中遇到和parse相关的函数,都是把字符串解析成其他的数据。
2)使用parseXxxx方法把一个字符串转成基本数据类型的时候,前提是这个字符串一定能够被转成对应的基本类型,否则会发生NumberFormatException异常。
根据查看API我们得知,如果转换不了会发生异常,所以在开发中如果使用上述方法将字符串转换为基本数据类型,需要对转换的代码进行捕获异常处理。
代码使用(仅以Integer类的静态方法parseXxx为例)如:
public class Demo18WrapperParse {
public static void main(String[] args) {
int num = Integer.parseInt("100");
}
}
注意:如果字符串参数的内容无法正确转换为对应的基本类型,则会抛出java.lang.NumberFormatException
异常。
package com.web;
public class Test43 {
public static void main(String[] args) {
//基本类型转字符串
//使用String类中的valueOf
int i = 1;
String s1 = String.valueOf(1.2);
String s2 = String.valueOf(true);
String s3 = String.valueOf(i);
String s0 = String.valueOf('a');
//byte、short、char-->int-->long-->float-->double
int j = 2;
byte x = 2;
short y = 2;
long l =2;
//使用对应的包装类中重载的toString方法
String s8 = Byte.toString(x);
String s9 = Byte.toString((byte) 2);
String s13 = Short.toString(y);
String s12 = Short.toString((short) 3);
String s10 = Character.toString('c');
String s11 = Character.toString((char) 99);
String s6 = Integer.toString(j);
String s14 = Long.toString(l);
String s7 = Float.toString(2.3F);
String s4 = Double.toString(1.23);
String s5 = Boolean.toString(true);
//字符串转换成对应的基本类型
//字符串转成基本类型使用包装类中的parseXxxx方法
byte b = Byte.parseByte(String.valueOf(2));
byte b1 = Byte.parseByte("2");
// byte[] getBytes ():把字符串转换为字节数组
byte[] b2 = "2".getBytes();
byte b3 = Byte.parseByte("a");
short sh = Short.parseShort("2");
//没有Character.parseCharacter(),因为一般没有单个的字符串
//char c1 = Character.parseCharacter(s);
// char[] toCharArray():把字符串转换为字符数组
char[] c = "2".toCharArray();
int i1 = Integer.parseInt("100");
long l2 = Long.parseLong("10");
float f = Float.parseFloat("10.0");
double d = Double.parseDouble("100");
Boolean bool = Boolean.parseBoolean("true");
System.out.println("bool = " + bool);//bool = true
System.out.println("b1 = " + b1);//b1 = 2
System.out.println("b2 = " + b2);//b2 = [B@5e2de80c
System.out.println("c = " + c);//c = [C@1d44bcfa
System.out.println("sh = " + sh);//sh = 2
System.out.println("b3 = " + b3);//Exception in thread "main" java.lang.NumberFormatException: For input string: "a"
}
}