类,字符串和封装器-Java笔记

字符串

字符串(String)类型为常量,值改变时会直接新建对象,多次改变值时造成资源浪费(Java中有常量池机制缓解此问题),更好的使用stringbuffer

对字符串,equals比较的是值,==比较的是否是同一个对象
常量池:用于存放产生的常量,对string说,有值相同的则不会新建对象(String s= "123";不会新建,String s= new String("123");会新建对象),而是把指针放到同一对象(所以没有new的话,值相同,指向同一对象,==返回true.)
注:有new的话,一定是不同对象,不管值一样不一样。没有new(String s="123";)

public class StringEx
{
	public static void main(String args[])
	{
		String s1="123";
		String s2="123";
		String s3=new String("123");
		String s4=new String("123");                
		String s5=new String();
		s5="123";//此操作会与常量池中存储的内容比较
		System.out.println (s5==s1);
		//输出:true
		//s2="123";使s5对象的指针指向和s1(在常量池中)相同的地方
                //原理:常量池中不会有重复的字符串
	}
}

StringBuffer和StringBuilder

StringBuffer比String效率要高的多

对比StringBuffer和StringBuilder:
        StringBuffer可应用于多线程,StringBuilder只能应用与单线程
        StringBuilder略快于StringBuffer

 

                s5="abc";
		StringBuffer sb=new StringBuffer("abc");
		s5.concat("123");//两种对象的连接字符方法不同
		sb.append("123");
		System.out.println (s5);
		long l1=System.currentTimeMillis();//获得当前时间
		for(int i=0;i<1000;i++)
		{
			s5=s5.concat(i+"");
		}
		long l2=System.currentTimeMillis()-l1;
		long l3=System.currentTimeMillis();
		for(int j=0;j<10000;j++)
		{
			sb=sb.append(j+"");
		}
		long l4=System.currentTimeMillis()-l3;
		//证明StringBuffer比String效率要高的多
		System.out.println ("Sring:"+l2+"\nStringBuffer:"+l4);
		
		/*对比StringBuffer和StringBuilder:
		 *StringBuffer可应用于多线程,StringBuilder只能应用与单线程
		 *StringBuilder略快于StringBuffer
		 **/
		StringBuilder sbd=new StringBuilder("abc");
		long l5=System.currentTimeMillis();
		for(int i=0;i<10000;i++)
		{
			sbd.append(i);
		}
		long l6=System.currentTimeMillis()-l5;
		System.out.println (l6);

 

String s1="3a";
System.out.println(s1.matches("[0-9]."));//输出true
String s2="5";
s2.matches("[0-9].");//false
s2.matches("[0-9]?.");//true  ?表示前边类型出现0或1次
String s3="5456895a";
s3.matches("[0-9]*.");//true  *表示前边类型出现几次都可以
                              +表示大于一次
                              {n}表示出现n次
[ap]//是a或p,严格区分大小写
"43ap".matches("[0-9]+[ap]{2}");//true

String s3[]={"7aa","234234aa","45645ap","43aP","3PP"};
String ss="[0-9]+[aP]{2}";
for(String s2:s3)//表示把s3中的元素逐个取给s2
{
	System.out.println (s2+":"+s2.matches(ss));
}
String s4="12ap345aq46ab345vr";
System.out.println(s4+""+s4.matches("([0-9]+[a-zA-Z]{2})+"));//[a-zA-Z]表示所有大小写字母
	//"()+"表示括号内的内容可循环
	

[a-zA-Z]表示所有大小写字母
"()+"表示括号内的内容可循环

字符串的排序

Math

Math不可继承(为最终类),不可new对象(构造器是私有的)

Math.floor(double);//返回值为double,返回小于参数的最大整数
Math.floor(-5.6);//返回-6.0

Math.ceil(double);//返回大于参数的最小的double整数

Math.round(float/double);//返回int/long,四舍五入

Math。random();//返回[0.0,1.0)

封装器类

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值