Java网络程序设计 课件 单元6 自动拆箱和装箱_第1页
Java网络程序设计 课件 单元6 自动拆箱和装箱_第2页
Java网络程序设计 课件 单元6 自动拆箱和装箱_第3页
Java网络程序设计 课件 单元6 自动拆箱和装箱_第4页
Java网络程序设计 课件 单元6 自动拆箱和装箱_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第六单元集合应用Map接□框架集合引入Collection接口框架在介绍面向对象编程课程时,我们一直使用的《租车系统》(详见4.6)如果想存放多个轿车的信息,该如何实现呢?以大家现有的知识储备,使用数组解决这个问题是最合理的方式。但是使用数组存放《租车系统》中多个轿车的信息,也会有很多问题。6.1.1集合引入6.1.1集合引入首先,Java语言中的数组长度是固定的,一旦创建出指定长度的数组以后,就给内存分配了相应的存储空间。这样就会给程序员造成很大的困惑,如果数组长度设置小了,不能满足程序需求,如果数组长度设置大了,又会造成大量的空间浪费。最后,数组在内存空间中是连续存放的,这样如果在数组中删除一个元素,为了保持数组内数据元素的有序性,之后的数组元素全部要前移一位,这样非常消耗系统资源。通过上面的分析大家可以看出,使用数组虽然可以实现之前的目的,但会有诸多的麻烦。为了解决这个问题,Java语言给我们提供了集合这种类型。集合是一种逻辑结构,提供了更多的方法,让使用者更加方便。针对不同的需求,Java提供了不同的集合,解决各类问题。6.1.2Collection接口框架Collection是最基本的集合接口,一个Collection代表一组Object,每个Object即为Collection中的元素。一些Collection接口的实现类允许有重复的元素,而另一些则不允许;一些Collection是有序的,而另一些则是无序的。6.1.2Collection接口框架图6.1Collection接口框架从图中可以看出,Collection接口继承自Iterable接口,因为Iterable接口允许对象成为foreach语句的目标,所以所有集合类都可以成为JDK1.5的新特性增强for循环的目标。Collection接口主要有三个子接口,分别是List接口、Set接口和Queue接口.6.1.2Collection接口框架●List接口实现List接口的集合是一个有序的Collection序列。操作此接口的用户可以对这个序列中每个元素的位置进行精确控制,用户可以根据元素的索引访问元素。List接口中的元素是可以重复的。●Set接口实现Set接口的集合是一个无序的Collection序列,该序列中的元素不可重夏。因为Set接口是无序的,所以不可以通过索引访问Set接口中的数据元素。●Queue接口Queue接口用于在处理元素前保存元素的Collection序列。除了具有Collection接口基本的操作外,Queue接口还提供了其它的插入、提取和检查等操作。6.1.3Map接口框架Map接口定义了存储和操作一组“键(key)值(value)”映射对的方法。Map接口和Collection接口的本质区别在于,Collection接口里存的是一个个对象,而Map接口里存放的是一系列的键值对。Map接口集合中的key不要求有序,对于一个集合里的映像对而言,不能包含重复的键,每个键最多只能映射到一个值。6.1.3Map接口框架图6.2Map接口框架从图中可以看出,HashMap和Hashtable是实现Map接口的集合类,这两个类十分类似,后面的单元中我们会详细介绍HashMap。第六单元Set接口Set接□方法HashSet使用TreeSet使用Comparable接口6.2.1Set接口方法下面列出了Set接口继承自Collection接口的主要方法:●booleanadd(Objectobj)向集合中添加一个数据元素,该数据元素不能和集合中现有数据元素重复。Set集合采用对象的equals()方法比较两个对象是否相等,判断某个对象是否已经存在于集合中。当向集合中添加一个对象时,HashSet会调用对象的hashCode()方法来获得哈希码,然后根据这个哈希码进一步计算出对象在集合中的存放位置。●voidclear()移除此集合中的所有数据元素,即将集合清空。●booleancontains(Objectobj)判断此集合中是否包含该数据元素,如果包含,则返回true。●booleanisEmptyO判断集合是否为空,为空则返回true。●Iteratoriterator()返回一个Iterator对象,可用它来遍历集合中的数据元素。●booleanremove(Object.obj)如果此集合中包含有该数据元素,则将其删除,并返回true。●int.size()返回集合中数据元素的个数,注意与数组、字符串获取长度的方法的区别。●Object[]toAxray()返回一个数组,该数组包含集合中的所有数据元素。6.2.1Set接口方法6.2.2HashSet使用Set接口主要有两个实现类HashSet和TreeSet,HashSet类有一个子类LinkedHashSet,它不仅实现了哈希算法,而且采用了链表结构。接下来我们通过一个案例来说明HashSet类的使用。importjava.util.*; //导入包publicclassTestSet{Publicstaticvoidmain(String[]args){//创建一个HashSet对象,存放学生姓名信息SetnameSet=newHashSet();nameSet.add("王云");nameSet.add("刘静涛");nameSet.add("南天华");nameSet.add("雷静");naxneSet.add("王云");//增加已有的数据元素System.out.println("再次添加王云是否成功:"+nameSet.add("王云"));System.out.println("显示集合内容:"+nameSet);System.out.println("集合里是否包含南天华:"+nameSet.contains("南天华"));System.out.println(”从集合中删除\"南天华\"…");nameSet.remove("南天华");Systemuout.println("集合里是否包含南天华:"+nameSet.contains("南天华"));System.out.println("集合中的元素个数为:"+nameSet.size());}}6.2.2HashSet使用从运行结果中可以看出,当向集合中增加一个已有(通过equals()方法判断)的数据元素时,没有添加成功。需要注意的是,可以通过add()方法的返回值判断是否添加成功,如果不获取这个返回值的话,Java系统并不提示没有添加成功。6.2.3TreeSet使用TreeSet类在实现了Set接口的同时,也实现了SortedSet接口,是一个具有排序功能Set接口类。本部分将介绍TreeSet类的使用,同时也会涉及Java如何实现对象间的排序功能,希望大家能深刻体会。TreeSet集合中的元素按照升序排列,默认是按照自然升序排列,也就是说TreeSet集合中的对象需要实现Comparable接口。6.2.3TreeSet使用importjava.util.*;publicclassTestTreeSet{publicstaticvoidmain(String[]args){Setts=newTreeSet();ts.add("王云";);ts.add("刘静涛");ts.add("南天华");System.out.println(ts);}}从运行结果可以看出,TreeSet集合ts里面的元素不是毫无规律的排序,而是按照自然升序进行了排序。这是因为TreeSet集合中的元素是String类,而String类实现了Comparable接口,默认按自然顺序排序。6.2.4Comparable接口如果程序员想定义自己的排序方式,方法也很简单,就是要让加入TreeSet集合中的对象所属的类实现Comparable接口,通过实现compareTo(Objecto)方法,达到排序的目的。假设有这样的需求,学生对象有两个属性,分别是学号和姓名。希望将这些学生对象加入TreeSet集合后,他们按照学号大小从小到大进行排序,学号相同的再按照姓名自然排序。6.2.4Comparable接口代码(实现Comparable接口):ClassStudentimplementsComparable{intstuNum=-1; //学生学号StringstuName="";//学生姓名Student(Stringname,intnum){this.stuNum=num;this.stuName=name;}//返回该对象的字符串表示,利于输出publicStringtoString(){return"学号为:"+stuNum+"的学生,姓名为:"+stuName;}//实现Comparable的compareTo方法publicintcompareTo(Objecto){Studentinput=(Student)o;//此学生对象的学号和指定学生对象的学号比较//此学生对象学号若大则res为1,若小则res为-1,相同的话res=0intres=stuNum>input.stuNum?1:(stuNum==input.stuNum?0:-1);//若学号相同,则按照string类自然排序比较学生姓名if(res==0){res=stuNpareTo(input.stuName);}returnres;}}其中,intcompareTo(Objecto)方法是用此对象和指定对象进行比较,如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。6.2.4Comparable接口publicclassTestTreeSet2{publicstaticvoidmain(String[]args){//用有序的TreeSet存储学生对象SetstuTS=newTreeSet();stuTS.add(newStudent("王云",1));stuTS.add(newStudent("南天华",3));stuTS.add(newStudent("刘静涛",2));stuTS.add(newStudent("张平",3));//使用迭代器循环输出Iteratorit=stuTS.iterator();while(it.hasNext()){System.out.println(it.next());}}}编写测试程序,如图所示,程序运行结果第六单元Iterator迭代器Iterator接□方法Iterator使用增强for循环前面学习的Collection接口、Set接口和List接口,它们的实现类都没有提供遍历集合元素的方法,Iterator迭代器为集合而生,是Java语言解决集合遍历的一个工具。它提供一种方法访问集合中各个元素,而不暴露该集合的内部实现细节。6.3.1Iterator接口方法6.3.1Iterator接口方法Collection接口的iterator()方法返回一个Iterator对象,通过Iterator接口的两个方法即可实现对集合元素的遍历。下面列举了Iterator接口的三个方法:●booleanhasNext()判断是否存在下一个可访问的数据元素。●Objectnext()返回要访问的下一个数据元素。●voidremove()从迭代器指向的collection集合中移除迭代器返回的最后一个数据元素。6.3.2Iterator使用接下来我们通过《租车系统》,讲解集合中Iterator迭代器的使用。假设《租车系统》有如下的需求调整:(1)系统里可以有若干辆轿车和卡车供用户租用。(2)系统管理员可以遍历这个系统里所有的车辆。

(3)遍历时是轿车,则显示轿车品牌,是卡车,则显示卡车吨位,同时完整显示车辆信息。6.3.2Iterator使用importjava.util.*;importorg.unitthree.*;classTestZuChe{publicstaticvoidmain(String[]args){//创建HashSet集合,甩于存放车辆SetvehSet=newHashSet();//创建2个轿车对象、2个卡车对象,并加入到HashSet集合中Vehiclec1=newCar("战神","长城");Vehiclec2=newCar("跑得快","红旗");Vehiclet1=newTruck("大力士","5吨");Vehiclet2=newTruck("大力士二代","10吨");vehSet.add(cl);vehSet.add(c2);vehSet.add(tl);vehSet.add(t2);//使用迭代器循环输出Iteratorit=vehSet.iterator();while(it.hasNext()){System.out.println("***显示集合中元素信息***");Objectobj=it.next();if(objinstanceofCar){Carcar=(Car)obj;//调用Car类的特有方法getBrand()System.out.println("该车是轿车,其品牌为:"+car.getBrand());}else{Trucktruck=(Truck)obj;//调用Truck类的特有方法getLoad()System.out.println("该车是卡车,其吨位为:"+truck.getLoad());}//调用Vehicle类方法show()((Vehicle)obj).show();}}}

在该段代码中,通过Iterator接口的hasNext()方法判断集合中是否还有对象元素,再通过该接口的next()方法获取这个对象元素。然后通过instanceof运算符,判断这个对象元素是轿车还是卡车,并显示轿车品牌或卡车吨位,最后调用这两个类共有的Show()方法显示车辆全部信息。6.3.2Iterator使用6.3.3增强for循环从JDK1.5开始,提供了另一种形式的for循环,这就是增强for循环,或称为foreach循环。借助增强foi循环,可以用更简单的方式来遍历数组和Collection集合中的对象。6.3.3增强for循环importjava.util.*;publicclassTestForEach{Publicstaticvoidmain(String[]args){String[]StuAn={"王云","刘静涛","南天华","雷静"};//传统for循环遍历for(inti=0;i<stuArr.length;i++){System.out.println(stuArr[i]);}//增强for循环遍历for(Stringstu;stuArr){System.out.println(stu);}SetnameSet=newHashSet();nameSet.add("王云");nameSet.add("刘静涛");nameSet.add("南天华");nameSet.add("雷静");//迭代器遍历Iteratorit=nameSet.iterator();while(it.hasNext()){System.out.printb(it.next());}//增强for循环遍历for(Objectstu2:nameSet){System.out.println((String)stu2);}}}下面我们用增强for循环与传统for循环做个比较。举一个非常简单的案例,一个数组(或集合)中存了四个学生的姓名字符串,分别用传统for循环和增强for循环,逐个显示学生姓名.6.3.3增强for循环通过代码可以看出,JDK1.5增强for循环使得代码短小且精炼,在遍历数组主集合的情况下,更加方便。但增强for循环在使用时,也有下面一些局限性,使用时需要注意。(1)在用传统for循环处理数组时,可以通过数组下标进行一些过程控制,例如可以通过数组下标毎次循环之后加2的方式,间隔输出数组中的元素。而增强for循环不能获得下标位置,类似的功能需要用其它方式实现。(2)如果使用增强for循环操作集合,无法实现对集合元素的删除,还是需要调用Iterator迭代器的remove()方法才能完成。第六单元List接口List接□方法ArrayList使用LinkedList使用List接口是Collection接口的子接口,在实现了List接口的集合中,元素是有序的,而且可以重复。List接口和Set接口一样,可以容纳所有类型的对象。List集合中的数据元素都对应一个整数型的序号索引,记录其在集合中的位置,可以根据此序号存取元素。JDK中实现了List接口的常用类有ArrayList和LinkedList。6.4.1List接□方法List接口继承自Collection接口,除了拥有Collection接口所拥有的方法外,它还拥有下列方法:●voidadd(intindex,Objecto)在集合的指定位置插入指定的数据元素。●Objectget(intindex)返回集合中指定位置的数据元素。●intindexOf(Objecto)返回此集合中第一次出现的指定数据元素的索引,如果此集合不包含该数据元素,则返回-1。●intlastIndexOf(Objecto)返回此集合中最后出现的指定数据元素的索引,如果此集合不包含该数据元素,则返回-1。●Objectremove(intindex)移除集合中指定位置的数据元素。●Objectset(intindex,Objecto)用指定数据元素替换集合中指定位置的数据元素。6.4.2ArrayList使用AitayList实现了List接口,在存储方式上ArrayList采用的是数组进行顺序存储的。ArrayList对数组进行了封装,实现了可变长度的数组。与ArrayList不同的是LinkedList,它在存储方式上采用的是链表进行链式存储。通过数据结构的学习,我们能得出这样的结论,因为ArrayList是用数组实现的,在插入或删除数据元素时,需要批量移动数据元素,故性能较差;但在查询数据元素时,因为数组是连续存储的,且可以通过下标进行访问,所以在遍历元素或随机访问元素时效率高。LinkedList正好与之相反,这一点在企业面试时经常被问到,需要大家深刻领会。继续修改《租车系统》的代码,学习ArrayList集合的使用。假设《租车系统》有如下的需求调整:(1)用户可以遍历这个系统里所有的车辆,但只能看到车型和车名。(2)当用户选中某辆车时,需要完整显示车辆信息。6.4.2ArrayList使用importjava.util.*;importorg.unitthree.*;classTestZuChe2{Publicstaticvoidmain(String[]args){intindex=-1;//用于显示序号Scannerinput=newScanner(System.in);//创建ArrayList集合,用于存放车辆ListvehAL=newArrayList();Vehiclec1=newCar("战神","长城");Vehiclec2=newCar("跑得快","红旗");Vehiclet1=newTmck(”大力士","5吨");Vehiclet2=newTruck("大力士二代”,"10吨");vehAL.add(cl);//将cl添加vehAL集合的末尾vehAL.add(c2);vehAL.add(tl);vehAL.add(t2);System.outprintln("***显示《租车系统》中全部车辆***");index=1;//增强for循环遍历for(Objectobj:vehAL){if(objinstanceofCar){Carcar=(Car)obj;System.out.println(index+"该车是轿车,其车名为:"+car.getName());}else{Trucktruck=(Truck)obj;System.out.println(index+"该车是卡车,其车名为:"+truck.getName());}index++;}System.out.print("请输入要显示详细信息的车辆编号:");//根据索引获取vehAL集合中元素,类型转换后调用show()方法输出((Vehicle)vehAL.get(input.nextInt()-l)).show();}}通过代码和运行结果可以看出,此例中采用了增强for循环的方式遍历了ArrayList集合中的所有元素,集合中元素的顺序是按照add()方法调用的顺序依次存储的,再通过调用ArrayList接口的get(intindex)方法获取指定位置的元素,并输出该对象的信息。6.4.2ArrayList使用6.4.3LinkedList使用LinkedList和ArrayList在逻辑结构上没有本质区别,只是存储结构上的差异导致程序员在决定使用哪个List实现类时需要做出选择。LinkedList接口除了拥有ArrayList接口提供的方法外,还增加了如下的一些方法:6.4.3LinkedList使用●voidaddFirst(Object0)将指定数据元素插入此集合的开头。●voidaddLast(Object0)将指定数据元素插入此集合的结尾。●ObjectgetFirst()返回此集合的第一个数据元素。●ObjectgetLast()返回此集合的最后一个数据元素。●ObjectremoveFirst()移除并返回此集合的第一个数据元素。●ObjectremoveLast()移除并返回此集合的最后一个数据元素。第六单元Map接口HashMap使用Map接□方法6.5.1HashMap使用Map接口定义了存储“键(key)值(value)”映射对的方法。6.5.1HashMap使用HashMap是Map接口的一个常用实现类,下面通过一个案例简要介绍HashMap的使用。我们知道,国际域名是使用最早也是使用最广泛的域名,例如表示工商企业的.com,表示网络提供商的.net,表示非盈利组织的.org等。现在需要建立域名和含义之间的键值映射,例如com映射工商企业,org映射非盈利组织,可以根据com查到工商企业,可以通过删除org删除对应的非盈利组织,这样的想法就可以通过HashMap来实现。importjava.util.*;publicclassTestHashMap{publicstaticvoidmain(String[]args){//使用HashMap存储域名和含义键值对的集合Mapdomains=newHashMap();domains.put("com","工商企业");domains.put("net","网络服务商");domains.put("org","非盈利组织");domains.put("edu","教研机构"); .domains.put("gov","政府部门");//通过键获取值Stringop=(String)domains.get("edu");System.out.println("edu国际域名对应的含义为:"+op);//判断是否包含某个键System.out.printb("domains键值对集合中是否包含gov:"+domains.containsKey("gov"));//删除键值对domains.remove("gov");System.out.println("删除后集合中是否包含gov:"+domains.containsKey("gov"));//输出全部键值对System.out.println(domains);}}编译、运行,程序运行结果6.5.1HashMap使用6.5.2Map接□方法上面通过一个简单的例子,让大家对Map接口的使用有了直接的认识,下面总结Map接口的常用方法如下●Objectput(Objectkey,Objectvalue)将指定键值对添加到Map集合中,如果此Map集合以前包含一个该键的键值对,则用指定值替换旧值。●Objectget(Objectkey)返回指定键所对应的值,如果此Map集合中不包含该键,则返回null。●Objectremove(Objectkey)如果存在指定键的键值对,则将该键值对从此Map集合中移除。6.5.2Map接□方法6.5.2Map接□方法●SetkeySet()返回此Map集合中包含的键的Set集合。在上面的程序最后添加下面的语句,System.out.println(domains.keySet());,则会输出[com,edu,org,net]。●Collectionvalues()返回此Map集合中包含的值的Collection集合。在上面的程序最后添加下面的语句,System.out.println(domains.values());,则会输出[工商企业,教研机构,非盈利组织,网络服务商]。●booleancontainsKey(Objectkey)如果此Map集合包含指定键的键值对,则返回true。●booleancontainsValue(Objectvalue)如果此Map集合将一个或多个键对应到指定值,则返回true。●intsize()返回此Map集合的键值对的个数。第六单元自动拆箱和装箱自动拆箱和装箱概念自动拆箱和装箱使用6.7.1自动拆箱和装箱概念自动拆箱和装箱,其目的是为了方便基本数据类型和其对应的包装类型之间的转换。我们可以直接把一个基本数据类型的值赋给其包装类型(装箱),反之亦然(拆箱),中间的过程由编译器自动完成。编译器对这个过程也只是做了简单的处理,通过包装类的valueOf()方法对基本数据类型进行包装,通过包装类的类似intValue()方法得到其基本数据类型。IntegerstuAgeI=23;IntstuAge=stuAgel;编译器将其自动变换为:IntegerstuAgel=Integer.valueOf(23);intstuAge=stuAgeI.intValue();6.7.2自动拆箱和装箱使用自动拆箱和装箱看起来非常简单,也很容易理解,但是我们在使用过程中,尤其是在自动装箱后,在两个对象之间使用“==”运算符进行比较时,其结果尤其需要注意。publicclassTestBox{publicstaticvoidmain(String[]args){IntegerstuAgeI1=23;System.out.println("过年了,年龄增长了一岁,现在年龄是:"+(stuAgeIl+1));IntegerstuAgeI2=23;System.out.println("stuAgeIl==stuAgeI2(值均为23)的结果是:"+(stuAgell==stuAgeI2));stuAgell=323;stuAgeI2=323;System.out.println("stuAgeIls==stuAgeI2(值均为323)的结果是:"+(stuAgell==stuAgeI2));System.out.println("stuAgeII.eqqals(stuAgeI2)(值均为323)的结果是"+(stuAgelI.equals(stuAge12)));}}6.7.2自动拆箱和装箱使用看到上面的运行结果,大家可能会很困惑,为什么当stuAgeI1和stuAgeI2这两个对象里存的值均为23时,使用“==”进行比较,其结果为true,而当这两个对象的值为323时,其结果却为false了!这是因为这些包装类的valueOf()方法,对部分经常使用的数据,采用缓存技术,也就是在未使用的时候,这些对象就创建并缓存着,需要使用的时候不需要新创建该对象,直接从缓存中获取即可,从而提高性能。例如Byte、Integer和Long这些包装类都缓存了数值在-128〜+127之间的对象,自动装箱的时候,如果对象值在此范围之内,则直接返回缓存的对象,只有在绞存中没有的时候再去创建一个对象。当第一次比较stuAgeI1和stuAgeI2这两个对象时,因为其值在-128〜+127之间,所以这两个对象都是直接返回的缓存对象,使用==比较时结果为true。而第二次比较stuAgeI1和stuAgeI2这两个对象时,其值超出了-128〜+127的范围,需要通过new方法创建两个新的包装类对象,所以再使用“==”比较时结果为false。6.7.2自动拆箱和装箱使用6.8泛型在之前使用集合的时候,装入集合的各种类型的对象都被当作Object对待,失去了自己的类型,而从集合中取出对象时需要进行类型转换,效率低下且容易出错。如何解决这个问题?可以使用泛型解决这个问题。接下来以《租车系统》的代码为例,通过泛型(即定义集合时同时定义集合中元素的类型)的方式,解决程序可读性以及强制类型转换时的稳定性问题。importjava.util.*;importorg.unitthree.*;classTestZuChe3{publicstaticvoidmain(String[]args){//使用泛型保证集合里的数据元素都是Vehicle类及其子类List<Vehicle>vehAL=newArrayList<Vehicle>();Vehiclecl=newCar("战神","长城");Vehiclec2=newCar("跑得快",”红旗");Vehicletl=newTruck("大力士","5吨");Vehiclet2=newTruck("大力士二代","10吨");vehAL.add(cl);vehAL.add(c2);vehAL.add(tl);vehAL.add(1,t2); //在集合索引1处添加t2//vehAL.add("大力士三代");//编译错误,添加的不是Vehicle1类型System.out.println("***显示《租车系统》中全部车辆信息***");//使用增强for循环遍历时,获取的已经是Vehicle对象for(Vehicleobj:vehAL){obj.show();}}}List<Vehicle>vehAL=newArrayList<Vehicle>();这句代码的作用是使用泛型创建ArrayList集合vehAL,且集合中元素必须是Vehicle类及其子类。如果向这个集合中添加其他的类型,编译器会报错。当从集合中获取对象时,也是直接获取了Vehicle类的对象,不需要再进行强制类型转换。第六单元自动拆箱和装箱自动拆箱和装箱概念自动拆箱和装箱使用6.7.1自动拆箱和装箱概念自动拆箱和装箱,其目的是为了方便基本数据类型和其对应的包装类型之间的转换。我们可以直接把一个基本数据类型的值赋给其包装类型(装箱),反之亦然(拆箱),中间的过程由编译器自动完成。编译器对这个过程也只是做了简单的处理,通过包装类的valueOf()方法对基本数据类型进行包装,通过包装类的类似intValue()方法得到其基本数据类型。IntegerstuAgeI=23;IntstuAge=stuAgel;编译器将其自动变换为:IntegerstuAgel=Integer.valueOf(23);intstuAge=stuAgeI.intValue();6.7.2自动拆箱和装箱使用自动拆箱和装箱看起来非常简单,也很容易理解,但是我们在使用过程中,尤其是在自动装箱后,在两个对象之间使用“==”运算符进行比较时,其结果尤其需要注意。publicclassTestBox{publicstaticvoidmain(String[]args){IntegerstuAgeI1=23;System.out.println("过年了,年龄增长了一岁,现在年龄是:"+(stuAgeIl+1));IntegerstuAgeI2=23;System.out.println("stuAgeIl==stuAgeI2(值均为23)的结果是:"+(stuAgell==stuAgeI2));stuAgell=323;stuAgeI2=323;System.out.println("s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论