常用类介绍

String类

  • String类不能被继承
  • String创建好之后值是不可以被改变的,这里指的是在堆中的字符串的值是不可以被改变。
 public static void main(String[] args) {
        String s = "monkey";
        change(s);
        System.out.println("main:" + s);//monkey
    }

    public static void change(String s) {
        s = "good";
        System.out.println("change:" + s);
    }

在堆中创建出来的字符串”monkey”是不能被改变的,如果要修改,系统会在堆中重新开辟内存空间将”good”放入,然后将change方法中的s重新引用这个新的内存地址上的”good”。

    String s1 = "monkey";//这种写法会利用字符串常量池,减少内存的使用
    String s2 = "monkey";
    String s3 = new String("monkey");
    String s4 = new String("good");


    System.out.println(s1 == s2);//true s1和s2的内存地址相同
    System.out.println(s1 == s3);//false
    System.out.println(s1.equals(s3));//true

上面代码中,创建s1时,字符串常量池中还不存在堆中monkey的引用,因此jvm会在常量池中创建一个引用指向堆中的这个字符串对象,创建s2时,jvm会去常量池中搜索,此时常量池中有monkey的引用,所以就不创建了,直接让s2指向之前创建的monkey,所以s1和s2指向的是同一个堆内存中的对象。
创建s3时,因为使用了new关键字,所以会在堆中开辟一块内存地址将其放入,s3指向这个新的内存地址,所以s3和s1指向的不是同一个内存地址。
创建s4时,使用了new关键字,会在堆中开辟一块内存地址,s4指向这个内存地址,然后字符串常量池中没有指向good的引用,所以会再重新开辟一块空间,将good放入,然后在字符串常量池中指向这个地址。

开发中建议使用String s = “monkey1024”;这种方式创建字符串对象,可以减少堆内存的使用。

  • 注意:比较两个字符串是否一致最好使用equals方法

例:

  • 统计一个字符串里面另一个字符串出现的次数,例如统计"monkey"在"I am monkey1024.monkey like banana.little monkey is smart."中出现的次数
  • 思路:通过indexOf方法在大的字符串中查找小字符串的索引值,找到后将这个索引值和小字符串的长度相加,之后将大的字符串截取根据相加的结果截取子串,然后继续在剩下的字符串中查找小字符串的索引值,直到索引值返回-1为止
public static void main(String[] args) {
        String src = "I am monkey1024.monkey like banana.little monkey is smart.";
        String dest = "monkey";
        //定义出现的次数
        int count = 0;

        //定义索引值
        int index = 0;


        while((index = src.indexOf(dest)) != -1){
            count++;
            //将src截取子串
            src = src.substring(index + dest.length());
        }

        System.out.println("出现的次数是:" + count);
    }
StringBuffer和StringBuilder

不要频繁的对字符进行拼接操作,例如下面代码:

 String str = "";

    for (int i = 0; i < 100; i++) {
        str += i;//str = str + i; 造成内存空间的浪费
    }

    System.out.println(str);

每次对字符串修改,底层都会重新开辟新的堆内存空间,这样会开辟很多个空间地址,造成浪费。

如果需要对字符串进行频繁拼接的话,建议使用StringBuffer或者StringBuilder,两者的使用方法一致
StringBuffer的底层是byte数组(jdk9之后),jdk8中底层是char数组,如果没有明确设定,则系统会默认创建一个长度为16的byte类型数组,在使用时如果数组容量不够了,则会通过数组的拷贝对数组进行扩容,所以在使用StringBuffer时最好预测并手动初始化长度,这样能够减少数组的拷贝,从而提高效率。

 //创建对象
    //StringBuffer sb = new StringBuffer();//底层会创建一个长度是16的byte数组
    StringBuffer sb = new StringBuffer(300);//底层会创建一个长度是300的byte数组,对数据长度进行预估

    for (int i = 0; i < 100; i++) {
        sb.append(i);//拼接操作
    }

    System.out.println(sb);

包装类

  • Java里面8个基本数据类型都有相应的类,这些类叫做包装类。
  • 可以在对象中定义更多的功能方法操作该数据,方便开发者操作数据,例如基本数据类型和字符串之间的转换。
基本数据类型         包装类
    byte             Byte
    short            Short
    int                Integer
    long            Long
    float            Float
    double            Double
    char            Character
    boolean            Boolean
public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int a = Integer.MAX_VALUE;
		System.out.println(a);
		
		//创建Integer对象:
		//传入int类型,会将int类型转换为Integer类型:
		Integer a1 = new Integer(a);
		System.out.println(a1.getClass());//class java.lang.Integer
		
		//传入String类型,会将String类型的”22″转换为Integer类型
		String s = "22";
		Integer a2 = new Integer(s);
		//如果传入的字符串不是数字,将会报出NumberFormatException
		//Integer a2 = new Integer("s");//java.lang.NumberFormatException: For input string: "s"
		System.out.println(a2);
		System.out.println(a2.getClass());//class java.lang.Integer
		
		
		//int–>Integer
		Integer i1 = Integer.valueOf(10);
		//Integer–>int
		int i2 = i1.intValue();
		int ai = Integer.valueOf(10);//将Integer类型转换为int类型
		//String–>Integer
		Integer i3 = Integer.valueOf("10");
		//Integer–>String
	    String s1 = i3.toString();
	    //String–>int
		int count = Integer.parseInt("10");//将String类型转换为int类型,传入的字符串必须是数字字符串
		//int–>String
	    String s2 = 10 + "";
	}
}

拆箱装箱和整型缓存

  • 自动装箱:把基本类型转换为包装类类型
    Integer i1 = 10;
  • 自动拆箱:把包装类类型转换为基本类型

在判断两个Integer类型是否相等时,要使用equals方法,不能使用”==”,Integer已经重写了Object中的equals方法。

Integer i3 = 128;
Integer i4 = 128;
System.out.println(i3==i4);//false

Integer i3 = new Integer(128);
Integer i4 = new Integer(128);

System.out.println(i3==i4);//false

如果Integer的值是在[-128~127]之间,这些值会从Integer中的“整型缓存池”获取。

Integer i5 = 127; 
Integer i6 = 127;

System.out.println(i5 == i6); //true

上面程序不会在堆中新建对象,会直接从整型常量池中拿

日期类型

获取毫秒数
public class DateTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		long now = System.currentTimeMillis();//获取毫秒数
		System.out.println(now);
		
		String s = "";
		StringBuffer  sb = new StringBuffer (200);
		long before = System.currentTimeMillis();
		for(int i= 1;i<100;i++) {
			//sb.append(i);
			//s+=i;
		}
		long after = System.currentTimeMillis();
		System.out.println(after-before);
	}

}
获取系统当前时间
// 获取系统当前时间
		Date d = new Date();
		System.out.println("今天是" + d.getDate() + "号 现在是:" + d.getHours() + "时" + d.getMinutes() + "分");
		// 今天是14号 现在是:9时24分
		System.out.println(d);// Mon Mar 14 09:24:37 CST 2022
		Date d0 = new Date(0);// 如果构造方法中参数传为0代表的是1970年1月1日
		System.out.println(d0);//Thu Jan 01 08:00:00 CST 1970
日期格式化类

在java.text包下有个SimpleDateFormat类,通过这个类可以将日期修改为我们想要的风格
y表示年 M表示月 d表示日 H表示小时 m表示分钟 s表示秒 S表示毫秒

//日期格式化
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss SSS");
		System.out.println(sdf);//java.text.SimpleDateFormat@c39f0e2
		String date = sdf.format(d);
		System.out.println(date);//2022年03月14日 09:30:07 812
将String类型转换为Date类型
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateTest02 {
	public static void main(String[] args) {
		String s = "2001年3月3日  12:12:12";
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日  HH:mm:ss");
		
		Date d = new Date();
		try {
			d = sdf.parse(s);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println(d);//Sat Mar 03 12:12:12 CST 2001
		System.out.println(sdf.format(d));//2001年03月03日  12:12:12
	}
}
Calendar简介
//Calendar
		Calendar c = Calendar.getInstance();
		System.out.println(c.get(Calendar.DAY_OF_WEEK));
		
enum
public class enmuTest {
	public class DayDemo {

		public static final String SPRING = "spring";

		public static final String SUMMER = "summer";

		public static final String AUTUMN = "autumn";

		public static final String WINTER = "winter";

	}

	public enum Season {
		Spring, Summer, Autumn, Winter
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println(Season.Summer);

	}
}

Random

双色球实例

import java.util.Arrays;
import java.util.Random;

public class RandomTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Random r = new Random();
//		int i = r.nextInt(22);
//		System.out.println(i);
		
		boolean[] isUsed = new boolean[33];//初始化为false
		int[] result = new int[6];
		System.out.println(isUsed[22]);
		int length = 0;
		while(length<6) {
			int red = r.nextInt(33);
			if(isUsed[red]==false) {
				isUsed[red]=true;
			}else {
				continue;
			}
			result[length++] = red;
			
		}
		Arrays.sort(result);
		for(int i = 0;i<length;i++) {
			System.out.print(result[i]+" ");
		}
		int blue = r.nextInt(15);
		System.out.println("\n"+blue);
	}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值