处理场景:通过文本框获取用户输入的数字数据,可是得到的都是字符串,如果想要对这些字符串的数字进行运算,必须妖精字符串转化成数字,
在Java中提供了相应的解决的对象
基本数据类型包装类:Java将基本数据类型值封装成了对象。封装成对象有什么好处?——这样可以提供更多操作基本数值的功能
一般我们对数值的基本操作就是通过运算符来进行运算但是如果我们想要获得一个数值的二进制,这个就是对数值的更多操作,这些功能封装到对象中
基本数据类型:byte short int long float double boolean char
对应的类 :Byte Short Integer Long Float Double Boolean Character
特点:(以整数Integer为例)
1.类中包含了对数值操作的多种功能
2.基本数据类型包装类型最重要的特点及作用:提供了数值与字符串相互转化的方法(重点解析)
1.怎么将字符串转化为基本数值(不是按照进制转化而是直接从表面转化)。结果就应该是基本数值,参数为字符串
各种基本数据的解析方法: xxx parseXxx(String s); character() 没有解析方法。
在parseInt(); 方法使用时会抛出一个异常,NumberFormatException 传入的数据错误,这是一个运行时异常,可以声明(提供一个解决办法),也可以不声明,让程序直接停止并抛出异常。
2.parseInt() 的一个重载形式:将字符串按照所需的进制转化为十进制
函数的功能是将 String s 这个字符串按照 radix 所规定的进制,转换成整数。要求:字符串的书写必须符合进制的要求。
例如:paresInt("5959",2); 这样的语句就会抛出异常,因为二进制只能由1 0 组合。16进制以上所含的字母也要符合要求。
3.将十进制转化为其他进制
-
-
static String
toBinaryString(int i)
在基数2中返回整数参数的字符串表示形式为无符号整数。
static String
toHexString(int i)
返回整数参数的字符串表示形式,作为16位中的无符号整数。
static String
toOctalString(int i)
在基数8中返回整数参数的字符串表示形式为无符号整数。
-
如何将数字转化为字符串
String.value(int i); Integer.toString(int i);
代码:
package Wrapper;
public class WrapperDemo1 {
public static void main(String[] args){
/*
/基本数据类型包装类
1.提供操作数据的多种功能
2.重点功能:数值和字符串的相互转化进制的转化**********
*/
System.out.println(Integer.MAX_VALUE);//整数的最大值
System.out.println(Integer.MIN_VALUE );//整数的最小值
//将字符串转化为数值
System.out.println(Integer.parseInt("123456"));//将字符串直接转化为十进制
System.out.println(Integer.parseInt("10101",2));//将字符串按照要求对的进制转化为十进制
//将十进制转化为其他进制
System.out.println(Integer.toBinaryString(12));//转化为二进制
System.out.println(Integer.toHexString(16));//转化为8进制
System.out.println(Integer.toOctalString(15) );//转化为16进制
//将数值转化为字符串
System.out.println(Integer.toString(484848));
System.out.println(String.valueOf(23.23));
}
}
运行结果:
2147483647
-2147483648
123456
21
1100
10
17
484848
23.23
————————————————基本数值和对象之间的转化——————————————————
//基本数值怎么变成包装对象
//构造函数
Integer in= new Integer(4);//将数值4 变成了包装好的对象
Integer i= new Integer("4");//也是创建数值4的对象(字符串被转化成了对象)
//静态方法
Integer ii = Integer.valueOf(4);
//包装好的对象怎么转化成数值(方法肯定是非静态的,要通过对象调用)
int num=i.intValue();
System.out.println(num);
————————————自动拆箱装箱————————————————————————————
在之前的书写中:
int i=4;
只是定义了基本的数据,可以非常方便的进行运算
Integer i= Integer(4);
定义了一个对象,可以提供了很多对数据的操作,但是就进行基本的运算就显得有一点麻烦,因此找一个折中的办法
因此在JDK1.5 以后,有了yi一个包装类的新特性
Integer i = 4;
左边是一个引用型变量,右边是一个对象(新特性,简化书写)——自动将4封装——自动装箱 /// Integer.valueOf(4);
valueOf(); 源代码:
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
其实在最底层,还是使用的new Integer(int i);
这样的书写,一是使书写更加的简便,二是是使用更加的方便灵活,可以同时,实现调用操作对象的功能,运算也变得十分方便
a=a+5;
将右边的a 由对象转化成了数值,自动拆箱a.intValue()+5,在完成加法运算后又自动封箱(全自动)
a=Integer.valueOf().(i.intValue()+5);//在1.5以下的版本中的书写
1.5以后的的这一新的特性在使用的时候,代码的书写上是给使用带来了极大的方便,但是一定要清楚他的原理
关于拆箱封箱的一些细节:
//基本数据包装类中的一些细节
Integer num1= new Integer(3);
Integer num2= new Integer(3);
System.out.println(num1==num2);//false
System.out.println(num1.equals(num2));//true
//equals 是Object 类中的方法,但是在Integer 中重写了这个方法,建立了自己的比较规则:在对象不为null 时。只要对象包含的int 类型的数值是相等的,那么这两个对象就是相等的
Integer i1 = 127;
Integer i2 = 127;
Integer i3 = 128;
Integer i4 = 128;
System.out.println("i1==i2? "+(i1==i2));//ture
System.out.println("i1==i2? "+i1.equals(i2));//true
System.out.println("i3==i4? "+(i3==i4));//false
System.out.println("i3==i4? "+i3.equals(i4));//true
equals 是Object 类中的方法,但是在Integer 中重写了这个方法,建立了自己的比较规则:在对象不为null 时。只要对象包含的int 类型的数值是相等的,那么这两个对象就是相等的
在1.5 以后的自动拆箱和封装定义中,如果数值在byte (-128------127)的范围内,不会创建新的对象空间而是使用原来已有的空间——也就是说,当数值在-128 到 127 之间时。两个引用型变量指向的是同一个对象
————————————————综合练习——————————————————————————————————
”23 9 -4 18 100 7“ 要求将这串数字按照从大到小排序
思路:1.只要有排序就要有数组,数组中就要有元素
2.元素都在字符串里,要想获得字符串里的内容,就需要创建字符串对象
3.从字符串获取到数值后存储到一个int 数组中进行排序
4.将排序后的数组变成字符串
先定义字符串:String strs = ”23 9 -4 18 100 7“
1.获取字符串中的数字。通过空格进行indexOf 的索引,找到位置,substring 截取。思路上就可以了,但是这个方法看起来就显得很麻烦,可以直接用split(分割的标记)
String[] strs = nums.split(" ");
但是这样分割出来是字符串数组,是无法进行大小比较的,要比较还是要转化成整数才可以。————将字符串数组转化成整数数组
代码:
package String;
import java.util.Arrays;
/*
基本数据包装类:整型 Integer 练习
”23 9 -4 18 100 7“ 要求将这串数字按照从小到大排序
思路:
1.先定义字符串
2.要排序就需要数组
3.按照空格为分割依据,分成字符串数组,但是无法比较
4.将字符串数组转化为整型数组
5.将整型数组进行比较
6.最后在转化为字符串
*/
public class IntegerDemo {
//将字符串数组转化为整型数组
private static int[] toIntArray(String[] strs){
int[] nums = new int[strs.length];
for(int i =0 ;i<strs.length;i++){
nums[i] = Integer.parseInt(strs[i]);
}
return nums;
}//1.自己写排序
private static void sortArray(int[] nums){
for(int i=0;i<nums.length-1;i++){
for(int j=i+1;j<nums.length;j++){
if(nums[i]>nums[j]){
int temp=nums[i];
nums[i]=nums[j];
nums[j]=temp;
}
}
}
}
//将整形数组转化为字符串
private static String toString(int[] nums){
StringBuffer str = new StringBuffer();
for(int i=0;i<nums.length;i++){
if(i!=nums.length-1){
str.append(nums[i]+" ");
}
else{
str.append(nums[i]);
}
}
return str.toString();
}
private static String sortIntArrayString(String str){
//1.转化为字符串数组
final String SPACE = " ";
String[] strs = str.split(SPACE);
//2.将字符串数组转化为整型数组
int[] nums =toIntArray(strs);
//3.将整型数组排序
//调用函数排序
Arrays.sort(nums);
sortArray(nums);
//转化为字符串
str= toString(nums);
return str;
}
public static void main(String[] args){
String str ="23 9 -4 18 100 7";
str =sortIntArrayString(str);
System.out.println("str = "+str);
}
}
//学习了 String String Buffer StringBuilder 基本数据类型包装类