性能测试(做反射时,拼setter方法想到的)

package test.reflection;

public class ReflectionDemo3 {

	public static void main(String args[]){
		String str="name";
		createSetter(str);
		createSetter0(str);
		createSetter2(str);
		createSetter3(str);
		createSetter4(str);
		/**
		 * 运行结果
			createSetter:	1522 	 Name
			createSetter0:	1864 	 Name
			createSetter2:	3711 	 Name
			createSetter3:	1073 	 Name
			createSetter3:	884 	 Name
		 */
	}

	public static void createSetter(String str){
		long t1=System.currentTimeMillis();
		StringBuffer buf=null;
		for(int i=0;i<9999999;i++){
			buf=new StringBuffer(str);
			char c=buf.charAt(0);
			String s=String.valueOf(c).toUpperCase();
			buf=buf.replace(0, 1,s );
		}
		long t2=System.currentTimeMillis();
		System.out.println("createSetter:\t"+(t2-t1)+" \t "+buf);
	}

	public static void createSetter0(String str){
		long t1=System.currentTimeMillis();
		StringBuffer buf=null;
		for(int i=0;i<9999999;i++){
			buf=new StringBuffer(str);
			char c=buf.charAt(0);
			String s=String.valueOf(c).toUpperCase();
			buf.delete(0,1).insert(0, s);
		}
		long t2=System.currentTimeMillis();
		System.out.println("createSetter0:\t"+(t2-t1)+" \t "+buf);
	}

	public static void createSetter2(String str){
		long t1=System.currentTimeMillis();
		for(int i=0;i<9999999;i++){
			char c=str.charAt(0);
			String s=String.valueOf(c);
			String su=s.toUpperCase();
			str=str.replaceFirst(s, su);
		}
		long t2=System.currentTimeMillis();
		System.out.println("createSetter2:\t"+(t2-t1)+" \t "+str);
	}

	public static void createSetter3(String str){
		long t1=System.currentTimeMillis();
		String newStr=null;
		for(int i=0;i<9999999;i++){
			newStr=str.substring(0, 1).toUpperCase()+str.substring(1);
		}
		long t2=System.currentTimeMillis();
		System.out.println("createSetter3:\t"+(t2-t1)+" \t "+newStr);
	}

	public static void createSetter4(String str){
		long t1=System.currentTimeMillis();
		StringBuffer buf=null;
		for(int i=0;i<9999999;i++){
			buf=new StringBuffer();
			buf.append(str.substring(0, 1).toUpperCase());
			buf.append(str.substring(1));
		}
		long t2=System.currentTimeMillis();
		System.out.println("createSetter3:\t"+(t2-t1)+" \t "+buf);
	}
}

时间: 2024-09-27 19:09:59

性能测试(做反射时,拼setter方法想到的)的相关文章

@Required 注释应用于 bean 属性的 setter 方法,它表明受影响的 bean 属性在配置时必须放在 XML 配置文件中,否则容器就会抛出一个 BeanInitializationException 异常。

@Required 注释应用于 bean 属性的 setter 方法,它表明受影响的 bean 属性在配置时必须放在 XML 配置文件中,否则容器就会抛出一个 BeanInitializationException 异常. java public class Student { private Integer age; private String name; @Required public void setAge(Integer age) { this.age = age; } public

android studio: 快捷键生成getter/setter方法时自动加m的问题

平时使用Android Studio 在写实体类的时候,习惯给实体类的成员变量前面加上一个"m" 修饰符表示这是一个成员变量,这也是搞java的一种约定俗成的写法,本来这是没有问题的,可是在默认情况下使用快捷键生成getter()/setter()方法时,生成的getter()/setter()方法名居然也加了“m” ,成员变量的个数少了也就罢了,自己一个一个手改,成员变量的个数一多,改的人头都大了! 比如我要给一个名为Person的实体类生成getter()/setter()方法 使

面向对象之反射及内置方法

一.静态方法(staticmethod)和类方法(classmethod) 类方法:有个默认参数cls,并且可以直接用类名去调用,可以与类属性交互(也就是可以使用类属性) 静态方法:让类里的方法直接被类调用,就像正常调用函数一样 类方法和静态方法的相同点:都可以直接被类调用,不需要实例化 类方法和静态方法的不同点: 类方法必须有一个cls参数表示这个类,可以使用类属性 静态方法不需要参数 绑定方法:分为普通方法和类方法 普通方法:默认有一个self对象传进来,并且只能被对象调用-------绑定

没有什么,开发ASP.NET时随便写写,想到什么写什么

没有什么,开发ASP.NET时随便写写,想到什么写什么,这次想写点开发过程中,比如在数据库,某一张表中有一个字段,如下: 上面代码示例中高亮字段,数据类型为BIT,它存储的值将为"True"或"False". 在前端aspx网页上,我们用一个形式来呈现友好的控件.一般来说,存储boolean值,一般使用CheckBox控件,选中得到为True,反之得到为False,这个是较理想的.但是现这里是要呈现性别,男或女.那就不能使用CheckBox控件了.最接近此要求,也许

Java网络编程从入门到精通(18):Socket类的getter和setter方法(2)

二.用于获得和设置Socket选项的getter和setter方法 Socket选择可以指定Socket类发送和接受数据的方式.在JDK1.4中共有8个Socket选择可以设置.这8个选项都定义在java.net.SocketOptions接口中.定义如下: public final static int TCP_NODELAY = 0x0001;    public final static int SO_REUSEADDR = 0x04;    public final static int

没有什么,开发ASP.NET时随便写写,想到什么写什么(转)

没有什么,开发ASP.NET时随便写写,想到什么写什么,这次想写点开发过程中,比如在数据库,某一张表中有一个字段,如下: 上面代码示例中高亮字段,数据类型为BIT,它存储的值将为"True"或"False". 在前端aspx网页上,我们用一个形式来呈现友好的控件.一般来说,存储boolean值,一般使用CheckBox控件,选中得到为True,反之得到为False,这个是较理想的.但是现这里是要呈现性别,男或女.那就不能使用CheckBox控件了.最接近此要求,也许

Python_getter和setter方法

当给属性赋值的时候,使用实例.属性=属性值的方式显然把属性暴露出来了,并且也无法对属性值进行限制检查,java中提供了setter和getter方法,那么python是如何做的呢?更多内容请参考:Python学习指南 属性赋值方法 在绑定属性时,如果我们直接把属性暴露出去,虽然写起来很简单,但是,没办法检查参数,导致可以把成绩随便改: s = Student() s.score = 9999 上面的赋值显然不符合实际情况,为了限制score的范围,可以通过一个set_score()方法来设置成绩

python全栈开发【第十七篇】面向对象反射和内置方法

一.静态方法(staticmethod)和类方法(classmethod) 类方法:有个默认参数cls,并且可以直接用类名去调用,可以与类属性交互(也就是可以使用类属性) 静态方法:让类里的方法直接被类调用,就像正常调用函数一样 类方法和静态方法的相同点:都可以直接被类调用,不需要实例化 类方法和静态方法的不同点: 类方法必须有一个cls参数表示这个类,可以使用类属性 静态方法不需要参数 绑定方法:分为普通方法和类方法 普通方法:默认有一个self对象传进来,并且只能被对象调用-------绑定

(转)nginx做转发时,带&#39;_&#39;的header内容丢失

原本在测试环境测试通过的APP,今天准备切到线上环境做最后测试,结果发现了错误.查看日志发现是APP端发送的http请求中的header内容丢失了.那么代码没有改动,怎么平白无故会丢失头信息? 于是想到两个环境的不同之处在于线上是通过nginx做的代理转发,会不会是nginx搞的鬼?于是搜索"nginx request header 丢失",果不其然是这个问题,nginx对下划线的头信息做了限制,找到问题所在就等于完成了一大半,办法总比困难多.遂决定记录之. - 方法一:不用下划线 既