Object类
java.lang.Object类 1. Object 类是所有java类的根父类 2. 如果在类的声明中未使用extends关键字指明其父类,则默认父类为java.lang.Object类 3. Object类中的功能(方法与属性)具有通用性 属性: 无 方法: equals() toString() getClass().....
包装类
什么是包装类?为什么需要包装类? 这是大家要了解的
对于java中的基本数据类型我们如果想要把当当做类来使用怎么办呢? 如果想要对这些基本数据类型直接调用一些方法来操作的话 怎么做呢?
由以上就产生了Wrapper包装类(这在python中叫装饰器)
包装类作用:
java提供了8种基本数据类型的对应的包装类, 使得基本数据类型的变量有了类的特征
掌握:基本数据类型
1: 是针对八种基本数据类型定义的相应的引用数据类型---包装类(封装类) 2: 有了类的特征就可以调用类的方法 3: 我们希望java的基本数据类型也有java面向对象的特殊所以定义了 包装类 把基本数据类型的特殊都封装在对应的类中
基本数据---->Wrapper
基本数据类型转化为包装类:调用包装类的构造器
// 基本数据转化为Wrapper : 直接调用包装类的构造器即可 public void testOne() { int num1 = 10; Integer integer = new Integer(num1); System.out.println("基本数据转化为包装类的结果:" + integer); Float f = new Float(3.5); System.out.println(f); }
Wrapper ---> 基本数据
Wrapper 转化为基本数据类型: 调用Wrapper包装类的 XXValue()方法
//Wrapper 转化为 基本数据 : 直接调用XXValue() 方法 public void WrapperToBasic() { Integer integer = new Integer(34); int num = integer.intValue(); System.out.println("Wrapper--->基本数据:"+num); Float f = new Float(4.6f); float fl = f.floatValue(); System.out.println("Float ----> 基本数据类型:"+fl); }
基本数据,Wrapper----> String
基本数据和包装类转化为String : 调用String重载的valueOf()方法
//基本数据,Wrapper ---> String : 基本数据和包装类转化为String 直接调用String的valueOf()方法 public void basicWrapperToString() { //方法一直接转化 int num = 10; System.out.println("这是num" + num); //直接加减 //方法二调用String的valueOf() int num1 = 20; String strNum1 = String.valueOf(num1); System.out.println("基本数据转化为String:"+strNum1); Integer integer = new Integer(35); String strInteger = String.valueOf(integer); }
String ---> 基本数据类型,Wrapper
String 转化为基本数据类型和包装类 需要调用包装类的parseXX()方法
//String ---> 基本数据,Wrapper : 调用包装类的paseXX public void StringToBsicsWrapper() { String str = "123"; //必须是转化的对应类型的字符, 转为int那么久必须是字符串类型的int Integer integerStr = Integer.parseInt(str); System.out.println(integerStr); }
错误的
public void StringToBsicsWrapper() { String str = "老王"; Integer integerStr = Integer.parseInt(str); //这样是错误的 因为你要转化为int那么String就要是字符串类型的int "123" System.out.println(integerStr); }
装箱子:
//装箱子: 转化为String //需要先把对应的信息转化为包装类 有了类的特征就可以调用类的方法了 public void pack(){ int num = 30; Integer integer = new Integer(num); String str = integer.toString(); System.out.println("pack:"+str); }
转化 | 方法 | 演示 |
基本数据转为Wrapper | 直接调用Wrapper的构造器 | Integer in= new Integer(30); |
Wrapper--->基本数据类型 | 调用包装类的XXXValue()方法 |
Integer integer = new Integer(34);
|
基本数据,Wrapper--->String | 调用String的valueOf()方法 |
int num1 = 20;
|
String----->基本数据,Wrapper | 调用包装类的paseXX()方法 |
String str = "123";
|
习题:
如下两个题目输出结果相同吗?各是什么:
1:
Object o1 = true ? new Integer(1) : new Double(2.0);
System.out.println(o1);//
2:
public void test() { Object o2; if (true) o2 = new Integer(1); else o2 = new Double(2.0); System.out.println(o2);// }
3:
public void method1() { Integer i = new Integer(1); Integer j = new Integer(1); System.out.println(i == j); Integer m = 1; Integer n = 1; System.out.println(m == n); Integer x = 128; Integer y = 128; System.out.println(x == y); }
解答:
习题1: 答案是:1.0 因为 // 因为在编译的时候int 和dubbo会自动对类型提升为dubbo的 所以结果是1.0 习题2: 答案:1 因为没有进行对比只是赋值
习题3: a: //false == 比引用地址 是否同一个对象 不是的
b://true
c:// false 因为Internet会把使用频繁的数字存到自己的地址值中 方便我们来调用避免重复调用,-128 ---- 127 这个范围内的 都是调用integer中的保存的都是同一个地址值 超过这个范围就不是同一个自地址值就是新建的了
3:知识点:
Integer内部定义了IntegerCache的结构 IntegerCache中定义了Integer[], 保存了从-128 --- 127范围的整数,如果我们使用自动装箱的方式给Inte赋值的范围在 -128 -- 127 的范围内时候就可以直接使用数组中的元素 不用去new了
.