精华内容
下载资源
问答
  • Java中的包装类

    2016-04-13 21:11:12
    Java中的包装类
    基本数据类型对象包装类。

    byte Byte
    short Short
    int Integer
    long Long
    boolean Boolean
    float Float
    double Double
    char Character

    基本数据类型对象包装类的最常见作用,
    就是用于基本数据类型和字符串类型之间做转换

    基本数据类型转成字符串。
    基本数据类型+""

    基本数据类型.toString(基本数据类型值);

    如: Integer.toString(34);//将34整数变成"34";

    字符串转成基本数据类型。

    xxx a = Xxx.parseXxx(String);

    int a = Integer.parseInt("123");

    double b = Double.parseDouble("12.23");

    boolean b = Boolean.parseBoolean("true");

    Integer i = new Integer("123");

    int num = i.intValue();

    十进制转成其他进制。
    toBinaryString();
    toHexString();
    toOctalString();

    其他进制转成十进制。

    parseInt(string,radix);

    class IntegerDemo 
    {
    	public static void sop(String str)
    	{
    		System.out.println(str);
    	}
    	
    	public static void main(String[] args) 
    	{
    		//整数类型的最大值。
    		//sop("int max :"+Integer.MAX_VALUE);
    
    //		将一个字符串转成整数。
    		int num = Integer.parseInt("123");//必须传入数字格式的字符串。
    		//long x = Long.parseLong("123");
    
    //		sop("num="+(num+4));
    
    //		sop(Integer.toBinaryString(-6));
    //		sop(Integer.toHexString(60));
    
    		int x = Integer.parseInt("3c",16);
    		sop("x="+x);
    	}
    }


    JDK1.5版本以后出现的新特性。

    class IntegerDemo1 
    {
    	public static void main(String[] args) 
    	{
    		
    //		Integer x = new Integer(4);
    
    		Integer x = 4;//自动装箱。//new Integer(4)
    
    		x = x/* x.intValue() */ + 2;//x+2:x 进行自动拆箱,变成了int类型,和2进行加
    
    法运算。
    					//再将和进行装箱赋给x。		
    
    		Integer m = 128;
    		Integer n = 128;
    
    		sop("m==n:"+(m==n));//false
    
    		Integer a = 127;
    		Integer b = 127;
    
    		sop("a==b:"+(a==b));//结果为true。因为a和b指向了同一个Integer对象。
    						//因为当数值在byte范围内容,对于新特性,
    
    如果该数值已经存在,则不会在开辟新的空间。
    	}
    	public static void method()
    	{
    		Integer x = new Integer("123");
    
    		Integer y = new Integer(123);
    
    		sop("x==y:"+(x==y));//false
    		sop("x.equals(y):"+x.equals(y));//true
    	}
    
    	public static void sop(String str)
    	{
    		System.out.println(str);
    	}	
    }


    ————摘自《毕向东25天》





    展开全文
  • java中的包装类

    2020-11-08 16:40:13
    java中的包装类 java中有八种基本数据类型,对应的有八种包装类。他们分别是 Byte; Short ; Character; Integer; Long; Float; Double; Boolean; 他们属于引用数据类型,有自己的方法和属性,内容比基本数据类型...

    java中的包装类

    java中有八种基本数据类型,对应的有八种包装类。他们分别是

    • Byte;
    • Short ;
    • Character;
    • Integer;
    • Long;
    • Float;
    • Double;
    • Boolean;

    他们属于引用数据类型,有自己的方法和属性,内容比基本数据类型更加丰富。
    并且他们的默认值是null。默认值为null的好处是,当你实体与数据库数据映射时,或者序列化或者反序列化时,你能清楚的知道这个属性是有值还是没值。不像基本数据类型有默认值。

    不同版本下的包装类

    在低版本中(我这里是用的jdk1.4。1.5有了自动拆装箱),包装类不能直接赋值,且包装类和基本数据类型不能互相比较的。

    在这里插入图片描述
    你必须强转,或者用new来生成包装类。且用==比较时,必须都转换为包装类或者基本数据类型,包装类变基本数据类型叫做拆箱,反之叫做装箱。这里1.4的Integer的valueof没有参数为int的,所以我先转为String。

    在这里插入图片描述
    下面我把jdk换成1.5
    在这里插入图片描述
    很明显,这样编译是通过的,因为当你执行Integer b1=10时,其实是执行这样的Integer b1=Integer.valueOf(10)语句。并且包装类和基本数据类型比较时,会自动完成上面所说的拆箱。

    包装类与基本数据类型比较

    看一下下面的代码,思考一下结果。

    public static void main(String[] args) {
            Integer a1= 10;
            Integer a2= 128;
            Integer a3= 10;
            Integer a4= 128;
            Integer b1=new Integer(10);
            Integer b2=new Integer(128);
            int c1=10;
            int c2=128;
            System.out.println(a1==b1);
            System.out.println(a2==b2);
            System.out.println("----------------");
            System.out.println(b1==c1);
            System.out.println(b2==c2);
            System.out.println("----------------");
            System.out.println(a1==a3);
            System.out.println(a2==a4);
            System.out.println("----------------");
            System.out.println(a1==c1);
            System.out.println(a2==c2);
            System.out.println(c1==a1);
            System.out.println(c2==a2);
        }
    

    下面是输出的结果:
    在这里插入图片描述
    前两个false很好理解,==是比较地址,两个Integer是不同的对象,所以不相等输出false.
    然后第二组结果输出两个true是因为,包装类和基本数据类型比较会把包装类转换基本数据类型,比较的其实是值。这和第四组输出的四个true要表达的意思相同,我把第四组的比较的值位置替换再比较,是测试是否会将基本数据转换为包装类再比较,答案是否定的。他们之间比较只会是包装类拆箱。
    第三组输出true和false这是为什么了?我前面说Integer b1=10时,其实是执行这样的Integer b1=Integer.valueOf(10),那我们来看一下这个valueof方法。

     public static Integer valueOf(int var0) {
            return var0 >= -128 && var0 <= Integer.IntegerCache.high ? Integer.IntegerCache.cache[var0 + 128] : new Integer(var0);
        }
    

    这个方法的意思是,当你的参数大于等于-128且小于这个缓存池的high时,我就从这个池子里面拿值,否则我就新建一个Integer对象。我们再来看一下这个缓存池是个什么东西。

     private static class IntegerCache {
            static final int high;
            static final Integer[] cache;
    
            private IntegerCache() {
            }
    
            static {
                int var1 = 127;
                int var2;
                if (Integer.integerCacheHighPropValue != null) {
                    var2 = Long.decode(Integer.integerCacheHighPropValue).intValue();
                    var2 = Math.max(var2, 127);
                    var1 = Math.min(var2, 2147483519);
                }
    
                high = var1;
                cache = new Integer[high - -128 + 1];
                var2 = -128;
    
                for(int var3 = 0; var3 < cache.length; ++var3) {
                    cache[var3] = new Integer(var2++);
                }
    
            }
        }
    

    这是Integer中的静态内部类,Integer[] cache是一个Integer的数组,里面放了值为-128到high的Integer对象。high等于127。
    所以说,你用valueof获得的Integer只要参数在-128到127之间,你都是从池子里面拿的,参数相同的话,拿的是同一个对象。
    对应的byte,short,char,long的包装类也有缓存池。
    版本往上走,对应的valueof和cache的代码有些不同,但效果还是一样。

    然后我这里有个问题想求救一下
    在这里插入图片描述
    左边是我的编译前的代码,右边是我用·idea打开的class文件,为什么我的Integer a2=10没有使用valueof,但是给它赋值另一个变量时就会使用。但是Short又会,这是个什么情况。还有比较时也没有拆箱,按道理是会拆箱的。就是我想看反编译的结果该怎么操作啊,我在idea里面下的是jad那个插件。
    补充:
    如果你想看实际执行的代码,是否有语法糖,还有一种办法,就是用javap -c class文件去查看字节码。不过首先你得手动执行javac命令,下面是java文件中的代码

    public class packaging {
    
        public static void main(String[] args) {
            Integer a=1;
            int b=1;
            System.out.println(a==b);
        }
    

    然后在终端去执行命令
    在这里插入图片描述去看字节码旁边的注释,确实是使用了valueof和拆箱intValue的。

    展开全文
  • Java 中的包装类

    2020-03-01 20:20:52
    Java 中的包装类 基本类型和包装类之间的对应关系: 包装类主要提供了两大类方法: 将本类型和其他基本类型进行转换的方法 将字符串和本类型及包装类互相转换的方法 Integer 包装类的构造方法: 如下代码所示: ...

    Java 中的包装类

    基本类型和包装类之间的对应关系:在这里插入图片描述
    包装类主要提供了两大类方法:

    1. 将本类型和其他基本类型进行转换的方法
    2. 将字符串和本类型及包装类互相转换的方法

    Integer 包装类的构造方法:

    在这里插入图片描述
    如下代码所示:
    在这里插入图片描述
    Integer包装类的常用方法:
    在这里插入图片描述

    样例代码:

    public class HelloWorld {
        public static void main(String[] args) {  
    		// 定义int类型变量,值为86
    		int score1 = 86; 
    		// 创建Integer包装类对象,表示变量score1的值
    		Integer score2=new Integer(score1);
    		// 将Integer包装类转换为double类型
    		double score3=score2.doubleValue();
    		// 将Integer包装类转换为float类型
    		float score4=score2.floatValue();
    		// 将Integer包装类转换为int类型
    		int score5 =score2.intValue();
    		System.out.println("Integer包装类:" + score2);
    		System.out.println("double类型:" + score3);
    		System.out.println("float类型:" + score4);
    		System.out.println("int类型:" + score5);
    	}
    }
    
    展开全文
  • JAVA中的包装类

    千次阅读 2017-07-28 23:23:03
    但是Java中的基本数据类型却是不面向对象的,这在实际使用时存在很多的不便,为了解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个和基本数据类型对应的类统称为包装类(Wrapper ...

    Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的,这在实际使用时存在很多的不便,为了解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个和基本数据类型对应的类统称为包装类(Wrapper Class),有些地方也翻译为外覆类或数据类型类。
    包装类均位于Java.lang包,包装类和基本数据类型的对应关系如下表所示:
    包装类对应表

    基本数据类型         包装类
    byte                Byte
    boolean             Boolean
    short               Short
    char                Character
    int                 Integer
    long                Long
    float               Float
    double              Double
         在这八个类名中,除了Integer和Character类以后,其它六个类的类名和基本数据类型一直,只是类名的第一个字母大写即可。
         对于包装类说,这些类的用途主要包含两种:
                   a、作为和基本数据类型对应的类类型存在,方便涉及到对象的操作。
                   b、包含每种基本数据类型的相关属性如最大值、最小值等,以及相关的操作方法。
         由于八个包装类的使用比较类似,下面以最常用的Integer类为例子介绍包装类的实际使用。
         1、实现int和Integer类之间的转换
    

    在实际转换时,使用Integer类的构造方法和Integer类内部的intValue方法实现这些类型之间的相互转换,实现的代码如下:
    int n = 10;
    Integer in = new Integer(100);
    //将int类型转换为Integer类型
    Integer in1 = new Integer(n);
    //将Integer类型的对象转换为int类型
    int m = in.intValue();
    2、Integer类内部的常用方法
    在Integer类内部包含了一些和int操作有关的方法,下面介绍一些比较常用的方法:
    a、parseInt方法
    public static int parseInt(String s)
    该方法的作用是将数字字符串转换为int数值。在以后的界面编程中,将字符串转换为对应的int数字是一种比较常见的操作。使用示例如下:
    String s = “123”;
    int n = Integer.parseInt(s);
    则int变量n的值是123,该方法实际上实现了字符串和int之间的转换,如果字符串都包含的不是都是数字字符,则程序执行将出现异常。(说明:异常的概念将在下一章进行讲述)
    另外一个parseInt方法:
    public static int parseInt(String s, int radix)
    则实现将字符串按照参数radix指定的进制转换为int,使用示例如下:
    //将字符串”120”按照十进制转换为int,则结果为120
    int n = Integer.parseInt(“120”,10);
    //将字符串”12”按照十六进制转换为int,则结果为18
    int n = Integer.parseInt(“12”,16);
    //将字符串”ff”按照十六进制转换为int,则结果为255
    int n = Integer.parseInt(“ff”,16);
    这样可以实现更灵活的转换。
    b、toString方法
    public static String toString(int i)
    该方法的作用是将int类型转换为对应的String类型。
    使用示例代码如下:
    int m = 1000;
    String s = Integer.toString(m);
    则字符串s的值是”1000”。
    另外一个toString方法则实现将int值转换为特定进制的字符串:
    public static int parseInt(String s, int radix)
    使用示例代码如下:
    int m = 20;
    String s = Integer.toString(m);
    则字符串s的值是”14”。
    其实,JDK自从1.5(5.0)版本以后,就引入了自动拆装箱的语法,也就是在进行基本数据类型和对应的包装类转换时,系统将自动进行,这将大大方便程序员的代码书写。使用示例代码如下:
    //int类型会自动转换为Integer类型
    int m = 12;
    Integer in = m;
    //Integer类型会自动转换为int类型
    int n = in;
    所以在实际使用时的类型转换将变得很简单,系统将自动实现对应的转换。

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,736
精华内容 4,294
关键字:

java中的包装类

java 订阅