Java之三大类String、Object及包装类的常用方法以及注意点

版权声明:转载请联系 :[email protected] https://blog.csdn.net/weixin_40928253/article/details/81164849

                     String类
1、实例化方式:
a.直接赋值:String str = "Hello Dear";
b.new方法:String str = new String("Hello Dear");
2、字符串相等比较:
"==":进行的是数值比较,比较的是两个字符串对象的内存地址;
"equals()":可以进行字符串内容的比较,一般将要比较的内容放在前面。
3、字符串常量是String的匿名对象。
4、String类两种实例化的区别
a.直接赋值:
String str1 = "Hello Dear";
String str2 = "Hello Dear";
String str3 = "Hello Dear";
由于String类的设计采用共享设计模式,因此直接赋值方法节省了堆内存空间,减少了垃圾空间。
b.采用构造方法:
String str1 = new String("Hello Dear");
String str2 = new String("Hello Dear");
String str3 = new String("Hello Dear");
每new一次就会开辟一个新空间,因此采用构造方法会产生垃圾空间。
对象如此操作:public String intern();
String str1 = new String("Hello Dear").intern() ; 
String str2 = "Hello Dear" ;         
System.out.println(str1 == str2); // true
5、字符串常量不可变更
eg.
String str = "hello";
str = str + " world";
str += "!!!" ;
System.out.println(str); // hello world!!!
String类使用原则:
    a. 字符串使用就采用直接赋值。 
    b. 字符串比较就使用equals()实现。 
    c. 字符串别改变太多。
6、字符与字符串
取得指定索引位置的字符:charAt(x)   如果x超过了字符串长度,
会抛出StringIndexOutOfBoundsException异常
字符串转换为字符数组:toCharArray()
字符数组转为字符串:String(array)

public class Test {
public static void main(String[] args) {
String str = "hellodear";
System.out.println(str.charAt(8));//取得指定索引位置的字符:charAt(x)  
char[] array = str.toCharArray(); //字符串转换为字符数组:toCharArray()
for(int i = 0;i < array.length;i++) {
	array[i]-= 32;				  //小写转大写,而后输出	
	System.out.print(array[i]+"、");
	}
	System.out.print("\n");
	System.out.println(new String(array));//字符数组转为字符输出	
	}
}

7、字符串的一些操作
字符串比较:
equals():区分大小写的比较;
equalsIgnoreCase()不区分大小写的比较;
compareTo():比较两个字符串大小若相等:返回0 ;小于:返回内容小于0;大于:返回内容大于0。
字符串查找:
contains():判断字符串是否存在。
字符串替换:
replaceAll():替换所有指定内容;
replaceFirst():替换指定内容的第一个。
字符串拆分:
split():将字符串按指定内容全部拆分;
length():字符串长度;
toUpperCase():字符串转大写;
toLowerCase():字符串转小写;
8、StringBuffer类
String的内容不可修改,StringBuffer和StringBuilder的内容可以修改;
StringBuffer采用同步处理,属于线程安全操作,StringBuilder采用异步处理,属于线程不安全操作。

                          Object类
1、Object类是参数的最高同一类型,所有类的对象都可以用Object接收;
public Object():无参构造为子类服务;
**public String toString():取得对象信息;
pubic boolean.equals(Object obj):对象比较。
2、接收引用数据类型
Object可以接收任意的对象,也可以接收所有数据类型,包括:类、数组、接口 。

//package 三大类;
//object接收对象及equals方法比较;
class person{
	private String name;
	private int age;
	public person(String name,int age) {
		this.age = age;
		this.name = name;
	}
//	public String toString() {
//		return "姓名是:"+this.name+",年龄为:"+this.age;
//	}
	public boolean equals (Object obj) {
		if (obj == null) {
			return false;
		}if(this == obj) {
			return true;
		}if(!(obj instanceof person)) {
			return false;
		}
		person per = (person) obj;
		return this.name.equals(per.name)&&this.age == per.age;
	}
}
class students{};
public class TestB{
	public static void main(String[] args) {
		person per1 = new person("找那个", 18);
		person per2 = new person("liuliu", 3);
		System.out.println(per1.equals(per2));
	}
//	public  static void fun(Object obj) {
//		System.out.println(obj.toString());
//	}
}

//接收引用数据类型
public class TestB{
	public static void main(String[] args) {
		Object object = new int[] {1,22,45,677,8,8,99};
		int[] data = (int []) object;
		for(int i:data) {
			System.out.print(i+"、");
		}
	}
}
//Object 接收接口类对象;
interface IMessage{
	public void getMessage();
}
class MessageImpl implements IMessage{
	public String toString() {
		return "liu";
	}
	public void getMessage() {
		System.out.println("刘留旒");
	}
}
public class TestB{
	public static void main(String[] args) {
		IMessage message  = new MessageImpl(); // 子接口向父接口转型
		Object object = message;  //接口向Obejct转型
		System.out.println(object);
		
		IMessage temp = (IMessage) object;//向下转型
		temp.getMessage();
	}
}

                            包装类

1、基本数据类型无法通过Object接收,object类只能接收引用数据类型;
包装类可以将基本数据类型包装在其中,让Object类接收。
2、包装类:
对象型包装类(object类的直接子类)
Boolean(bool的包装类) Character(char的包装类)
数值型包装类(Number类的包装子类)
Integer(int)     Byte(byte)     Double(double)     Short(short)     Long(long)     Float(float)
3、Jdk1.5以后提供自动拆装箱操作
所有相同类型的包装类进行对象值比较一律使用equals方法。
对于Intergeter = ?(自动装箱) -128——127 之间的赋值,Intergeter对象会在Intergeter常量池中产生,
会复用已有对象,这个区间内的值比较可以直接引用“==”比较,会复用已有对象。此区间以外的所有数据,都会
在堆上产生,并不会复用已有对象,因此推荐使用equals方法进行判断。

package 三大类;

//包装类接收基本数据类型
class IntDemo{
	private int num;
	public IntDemo(int num) {
		this.num = num;
	}
	public int intValue() {
		return this.num;
	}
}
public class TestA {
	public static void main(String[] args) {
		Object object = new IntDemo(66);
		IntDemo temp = (IntDemo) object;
		System.out.println(temp.intValue());
	}
}
public class TestA {
	@SuppressWarnings("deprecation")
	public static void main(String[] args) {
		@SuppressWarnings("deprecation")
		Integer integer1 = new Integer(10);
		Integer integer2 = new Integer(10);
		
		String string = "1112345";
		int num = Integer.parseInt(string);
		System.out.println(string);
		
		String string1 = "111245678";
		Double num1 = Double.parseDouble(string1);
		System.out.println(string1);
		
		String string2 = "1112abcd";
		Double num2 = Double.parseDouble(string2);
		System.out.println(string2);
		
		System.out.println(integer1 == integer2);
		System.out.println(integer1 == new Integer(10));
		System.out.println(integer1.equals(integer2));
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_40928253/article/details/81164849