第6章 包装类和处理对象

包装类和对象处理

包装类

为了解决8种基本数据类型的变量不能当成Object类型变量使用的问题。

1.基本数据类型与包装类对象之间的转换

java支持自动装箱(可以直接把一个基本类型变量直接赋给对应的包装类)和自动拆箱(可以直接把包装类对象直接赋给一个对应的基本类型变量)的功能。

public class AutoBoxingUnboxing{
	public static void main(String[] args){
		// 自动装箱
		Integer inObj = 5;
		// 自动拆箱
		int it = inObj;
	}
}

2.包装类实现基本类型变量和字符串之间的转换

public class Primitive2String{
	public static void mian(String[] args)
	String intStr = "123";
	//字符串 -- 基本数据类型
	int it1 = Integer.parseInt(intStr);
	//基本数据类型 -- 字符串
	String ftstr = String.valueOf(2.345f)
	//也可以通过基本数据类型+""来转换成字符串
	String intStr = 5 + "";
}

处理对象

1.打印对象和toString()方法

java所有类都直接或间接继承自Object类,Object有一个方法.toString(),方法用于"自我描述"。默认打印只是一个实例地址。因此可以通过重写来实现“自我描述”。

class Apple{
	private String color;
	private double weight;
	public Apple(){ }
	public Apple(String color, double weight){
		this.color = color;
		this.weight = weight;
	}
	// 省略Color和weight的setter和getter方法
	// 重写toString()方法,用于实现Apple对象的"自我描述"
	public String toString(){
		return "一个苹果,颜色是:" +color+", 重量是:"+ weight;
  }
}

public class ToStringTest{
  public static void main(String[] args){
    Apple a = new Apple("红色", 5.68);
    // 打印Apple对象
    System.out.println(a);
    // 也等于
    System.out.println(a.toString());
  }
}

运行结果:

一个苹果,颜色是:红色,重量是:5.68

2.==和equals方法

1)==使用

java中判断两个变量是否相等有两种方式"==“和"equals”

其中"==",如果两个变量是基本类型,且都是数值类型,则只要它们的值相等,就将返回true。

但对于两个引用类型变量,只有它们指向同一个对象时,==判断才返回true。

public class EqualTest{
	public static void main(String[] args){
		int it = 65;
		int float f1 = 65.0f;
		// 输出true
		System.out.println(it==f1);
		char ch = 'A';
		// 输出true
		System.out.println(it==ch);
		
		// 引用变量比较
		String str1 = new String("hello");
		String str2 = new String("hello");
		// 输出false
		System.out.println(str1==str2);
	}
}
  • String创建变量中,"hello"和new String(“hello”)有什么区别?

    当Java程序直接使用"hello"的字符串时,JVM将会在常量池来管理这些字符串;当使用new String(“hello”)时,JVM会先使用常量池来管理“hello”常量,再调用String类的构造器来创建一个新的String对象,新创建的对象被保存在堆内存中。换句话说,new String(“hello”)一共产生了两个字符串对象。

2)equals方法使用

Object默认提供的equals()方法只是比较对象的地址,即Object类的equals()方法的结果与==相同。在实际使用中可能只要求它们引用对象里包含的成员变量类变量相同即可认为相等。这就需要重写equals方法。

其中,String类已经重写了equals方法,所以只要它们的字符串序列相同即可认为相等。

例1:String类中的equals

String str1 = new String("hello");
String str2 = new String("hello");
// 输出true
System.out.println(str1.equals(str2));

例2:重写equals方法

class Person{
	private String name;
	private String idStr;
	public Person(){}
	public Person(String name, String idStr){
		this.name = name;
		this.idStr = idStr;
	}
	// 此处省略name和idStr的setter和getter方法
	
	// 重写equals()方法,提供自定义的相等标准
	public boolean equals(Object obj){
		// 如果两个对象为同一个对象
		if (this == obj)
			return true;
		if (obj !=null && obj.getClass == Person.class){
			Person personObj = (Person)obj;
			// 并且当前对象的idStr与obj对象的idStr相等时才可判断两个对象相等
			if(this.getIdStr().equals(personObj.getIdStr())){
				return true;
			}
		}
		return false;
	}
}

public class OverrideEqualsRught{
  public static void main(String[] args){
    Person p1 = new Person("孙悟空","111");
    Person p2 = new Person("孙行者","111");
    Person p3 = new Person("孙悟饭","112");
    // p1和p2的idStr相等,所以输出为true
    system.out.println(p1.equals(p2));
    // p2和p3的idStr不相等,所以输出为false
    system.out.println(p2.equals(p3));
  }
}

参考书籍:《疯狂Java讲义 》李刚;

发布了9 篇原创文章 · 获赞 0 · 访问量 81
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览