`

java lang / BigDecimal

    博客分类:
  • Java
阅读更多

String

StringTest.java

 

http://blog.csdn.net/RichardSundusky/archive/2007/02/12/1508028.aspx

hashCode()的返回值和equals()的关系如下:

如果x.equals(y)返回“true”,那么x和y的hashCode()必须相等。 

如果x.equals(y)返回“false”,那么x和y的hashCode()有可能相等,也有可能不等。 

http://zhidao.baidu.com/question/47831363.html

1.如果是基本变量,没有hashcode和equals方法,基本变量的比较方式就只有==; 

2.如果是变量,由于在java中所有变量定义都是一个指向实际存储的一个句柄(你可以理解为c++中的指针),在这里==是比较句柄的地址(你可以理解为指针的存储地址),而不是句柄指向的实际内存中的内容,如果要比较实际内存中的内容,那就要用equals方法,但是!!! 

如果是你自己定义的一个类,比较自定义类用equals和==是一样的,都是比较句柄地址,因为自定义的类是继承于object,而object中的equals就是用==来实现的,你可以看源码。 

那为什么我们用的String等等类型equals是比较实际内容呢,是因为String等常用类已经重写了object中的equals方法,让equals来比较实际内容,你也可以看源码。 

3. hashcode 

在一般的应用中你不需要了解hashcode的用法,但当你用到hashmap,hashset等集合类时要注意下hashcode。 

你想通过一个object的key来拿hashmap的value,hashmap的工作方法是,通过你传入的object的hashcode在内存中找地址,当找到这个地址后再通过equals方法来比较这个地址中的内容是否和你原来放进去的一样,一样就取出value。 

所以这里要匹配2部分,hashcode和equals 

但假如说你new一个object作为key去拿value是永远得不到结果的,因为每次new一个object,这个object的hashcode是永远不同的,所以我们要重写hashcode,你可以令你的hashcode是object中的一个恒量,这样永远可以通过你的object的hashcode来找到key的地址,然后你要重写你的equals方法,使内存中的内容也相等。。。 

 

package com.javaeye.lindows.lang;

public class StringTest {

	/**
	 * @param args
	 */
	private void StringLengthMethod() {
		// 看看128位算法
		String string = "488ab41232d6b6c63da35752033b2e9cc424e008dca66331e43845bf9ba962a5de4363bf955033c5634bb34b2b6f4c49e6842e257c0ffa86942aaf78abeb70a8";
		System.out.println(string.length());
	}

	public static void main(String[] args) {
		StringTest sTest = new StringTest();
		sTest.StringLengthMethod();//

		long date = System.currentTimeMillis();
		String s = "abc";
		String s1 = "abc";
		System.out.println(s);
		// 等效于
		// char data[] = { 'a', 'b', 'c' };
		// String str = new String(data);
		System.out.println(s == s1); // true
		System.out.println(s.equals(s1));// true

		// String new对象时的变化
		String s2 = new String("abc");
		String s3 = new String("abc");
		System.out.println(s2 == s3); // false new出的地址不等
		System.out.println(s2.equals(s3)); // true 但内容相同

		// 场景:表单的用户名忽略空白和大小写
		String s4 = new String(" abc");
		String s5 = "ABC ";
		// s4.trim();//去掉前后空白
		System.out.println(s4.trim().equalsIgnoreCase(s5.trim()));// true

		if (s4.equalsIgnoreCase(s5)) {
			System.out.println("yes");
			// do something
		} else {
			System.out.println("no");
			// do something
		}
	}
}

 

 

 

MessFormatTest.java

 

package com.javaeye.lindows.lang;

/**
 * @author Lindows
 */
public class MessageFormatTest {
	public MessageFormatTest() {

	}

	public static void main(String[] args) {
		// jdk1.4不能用String.format(),得用另一种方法格式化字符串
		String helloString = "hello {0},you are {1}";
		helloString = java.text.MessageFormat.format(helloString, new Object[] {
				"AA", "GREAT" });
		System.out.println(helloString);
		// 结果: hello AA,you are GREAT

		// %d标识数字 %s标识字符
		// http://www.iteye.com/topic/313394
		String sqlString = "select * from dept d where d.id=%d and d.name=%s";
		System.out.println(String.format(sqlString, 100, "lindows"));
		/*
		 * %2$d标识 第2个类型为整数的参数 
		 * %1$s标识 第1个类型为字符串的参数
		 */
		String sqlString2 = "select * from dept d where d.id=%2$d and d.name=%1$s";
		System.out.println(String.format(sqlString2, "lindows", 100));

	}

}

 

JAVA中int转String类型效率比较

http://www.iteye.com/topic/252767

 

package com.javaeye.lindows.lang;

public class Int2String {
	/**
	 * int类型转化成String类型的三种方式 
	 * (1) String.valueOf(i) 
	 * (2) Integer.toString(i) 
	 * (3) i+""
	 */
	public static void main(String[] args) {
		// 数组下标从0开始
		int[] intArr = new int[100000];
		//为了公平分别定义三个数组  
		String[] strArr1 = new String[100000];
		String[] strArr2 = new String[100000];
		String[] strArr3 = new String[100000];

		// 赋值
		Long long1 = System.currentTimeMillis();
		for (int i = 0; i < 100000; i++) {
			intArr[i] = i + 1;
		}

		// String.valueOf();
		// String的valueOf(int型参数)方法转换成 int
		Long long2 = System.currentTimeMillis();
		for (int i = 0; i < 100000; i++) {
			strArr1[i] = String.valueOf(intArr[i]);
		}

		// Integer.toString();
		// Integer的toString(int 型参数)方法转换成 String
		Long long3 = System.currentTimeMillis();
		for (int i = 0; i < 100000; i++) {
			strArr2[i] = Integer.toString(intArr[i]);
		}

		// i + ""; //加空字符串自动转换 String
		Long long4 = System.currentTimeMillis();
		for (int i = 0; i < 100000; i++) { 
			strArr3[i] = intArr[i] + ""; 
		}
		Long long5 = System.currentTimeMillis();

		System.out.println(long1);
		System.out.println(long2);
		System.out.println("赋值:		"+(long2 - long1));
		System.out.println("String.valueOf(): "+(long3 - long2));
		System.out.println("Integer.toString() :"+(long4 - long3));
		System.out.println("i+ \"\"		    :" + (long5 - long4));
/*		
		1234719707265
		1234719707281
		赋值:		16
		String.valueOf(): 140
		Integer.toString() :94
		i+ ""		    :141
*/
	}
}






String,int,Integer,char 几个类型常见转换

http://derpvail.iteye.com/blog/261015

http://antonyup-2006.iteye.com/blog/284651

http://www.blogjava.net/algz/articles/227937.html

 

如何将字串 String 转换成整数 int?
int i = Integer.valueOf(my_str).intValue();

int i=Integer.parseInt(str);

如何将字串 String 转换成Integer ?
Integer integer=Integer.valueOf(str);

如何将整数 int 转换成字串 String ?
1.) String s = String.valueOf(i);
 
2.) String s = Integer.toString(i);
 
3.) String s = "" + i;

如何将整数 int 转换成Integer ?
Integer integer=new Integer(i);

如何将Integer 转换成字串 String ?
Integer integer=String

如何将Integer 转换成 int ?
int num=Integer.intValue();

如何将String转换成  BigDecimal  ?
 BigDecimal d_id = new BigDecimal(str);

由于BigDecimal精度问题导致退货订单创建失败 / 中台--肖宇14050302 / 18705179907

http://wiki.cns*****.com/pages/viewpage.action?pageId=19369086

转至元数据起始 问题现象: OMSD创建完退货订单后,调用I-OMSD-OMS-003接口给交易创建逆向订单,请求和响应报文如下:

http://dl2.iteye.com/upload/attachment/0103/6436/9f9e61eb-a543-3192-89c6-17a63274802a.jpg

BigDecimal_request

http://dl2.iteye.com/upload/attachment/0103/6440/50fa930a-087c-336a-a9dc-70d1c3549316.jpg

BigDecimal_response

本意是想传0.2过去,但是却传了一大串数字:0.200000000000000011102230246251565404236316680908203125

请求报文中refundAmt字段赋值代码:input.setRefundAmt(df.getRefundAmt().toString());

原因分析:

df.getRefundAmt()的返回类型是BigDecimal类型,导致输出的时候精度出现问题,测试类如下:

public class TestMath {

    public static void main(String[] args) {

        Double a = 0.2;

        BigDecimal b = new BigDecimal(a);

        System.out.println(a);

        System.out.println(a.toString());

        System.out.println(b.toString());

        System.out.println(String.valueOf(b.doubleValue()));

    }

}

运行结果:

0.2

0.2

0.200000000000000011102230246251565404236316680908203125

0.2

结论:

BigDecimal精度问题导致传值错误。

解决方法:

转成double值输出:input.setRefundAmt(String.valueOf(df.getRefundAmt().doubleValue()));

拓展:

public class TestMath {

    public static void main(String[] args) {

        System.out.println(0.05+0.01);

        System.out.println(1.0 - 0.42);

        System.out.println(4.015 * 100);

        System.out.println(123.3 / 100);

    }

}

运行结果:

0.060000000000000005

0.5800000000000001

401.49999999999994

1.2329999999999999

double类型运算依然出现精度问题,所以代码中需要用到BigDecimalUtil类的一系列运算方法

 

加法:BigDecimalUtil.add(double v1, double v2)

减法:BigDecimalUtil.subtract(double v1, double v2)

乘法:BigDecimalUtil.multiply(double v1, double v2)

除法:BigDecimalUtil.divide(double v1, double v2)

 


如何将 String 转换成 char ?
char[] ca="123".toCharArray();

如何将char转换成String?
String s=ca.toString();      //任何类型都可以采用toString()转换成String类型

//-----------------日期-------------------------

Calendar calendar=Calendar.getInstance();
  int year=calendar.get(Calendar.YEAR);
  int month=calendar.get(Calendar.MONTH)+1;
  int day=calendar.get(Calendar.DATE);

获取今天的日期字符串
String today=java.text.DateFormat.getDateInstance().format(new java.util.Date());
获取今天的日期
new java.sql.Date(System.currentTimeMillis())

 

java.lang.annotation

http://yikaicheng-happy.iteye.com/blog/226674

sptring 注解入门

http://www.iteye.com/topic/295348

Annotation 入门教程

http://hi.baidu.com/banseon/blog/item/13a53df4f4d95169ddc474b7.html

 

SayHello.java

package com.javaeye.lindows.test;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @author Lindows
 * 
 * @ElementType.TYPE 类、接口(包括注释类型)或枚举声明
 * 
 * @RetentionPolicy.RUNTIME 编译器将把注释记录在类文件中,在运行时 VM 将保留注释,因此可以反射性地读取。
 * 
 * @documented 指示某一类型的注释将通过 javadoc 和类似的默认工具进行文档化。
 *             应使用此类型来注释这些类型的声明:其注释会影响由其客户端注释的元素的使用。 
 *             如果类型声明是用 Documented来注释的,则其注释将成为注释元素的公共 API 的一部分。
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented()
public @interface SayHello {
	String value() default "HELLO WORLD";
}

 

HelloWorld.java

package com.javaeye.lindows.test;

@SayHello()
public class HelloWorld {
	public void show() {
		System.out.println("+++++++++++++++++");
	}
}

 TestHelloWorld.java

package com.javaeye.lindows.test;

public class TestHelloWorld {
	public static void main(String[] args) throws ClassNotFoundException {
               @SuppressWarnings("unchecked")
		Class clazz = Class.forName("com.javaeye.lindows.test.HelloWorld");
		boolean bool = clazz.isAnnotationPresent(SayHello.class);
		// clazz.isAnnotationPresent
		// 如果指定类型的注释存在于此元素上,则返回 true,否则返回 false。此方法主要是为了便于访问标记注释而设计的。
		if (bool) {
			SayHello hello = (SayHello) clazz.getAnnotation(SayHello.class);
               // getAnnotation 如果存在该元素的指定类型的注释,则返回这些注释,否则返回 null。 
			System.out.println("打招呼");
			System.out.println(hello.value());
			System.out.println("完毕");
		}
	} 
}

 

 

MyException 自定义异常

SimpleException.java

 

package com.javaeye.lindows.lang;
//Thinking in java4  P251
public class SimpleException extends Exception {
	private static final long serialVersionUID = 3958279279547826523L;

	public void sVoid() {
		System.out.println("this is SimpleException");
	}
}

 

 InheritException.java

 

package com.javaeye.lindows.lang;

public class InheritException {
	public void iVoid() throws SimpleException {
		throw new SimpleException();
	}

	public static void main(String[] args) {
		InheritException iException = new InheritException();
		try {
			iException.iVoid();
		} catch (SimpleException e) {
			e.sVoid();
		}
	}
}

 

 

 

 

 

end

  • 大小: 58.9 KB
  • 大小: 45.2 KB
分享到:
评论

相关推荐

    安川MP7系列工控系统源码解析:关键算法与硬件交互揭秘

    内容概要:本文深入剖析了安川MP7系列工业控制系统的关键源码,重点介绍了运动轨迹规划、通信协议处理以及故障处理机制等方面的技术细节。通过对实际代码片段的解读,揭示了该系统在硬件寄存器直接访问、特殊功能码处理等方面的独特之处。同时,文中还分享了一些基于实践经验得出的重要参数设置及其背后的故事,如特定摩擦补偿系数的选择原因等。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是对安川产品有一定了解并希望深入了解其内部工作机制的专业人士。 使用场景及目标:帮助读者掌握安川MP7系列控制器的工作原理,提高对类似系统的维护能力和故障排查效率。对于想要进一步研究或二次开发该系统的开发者来说,也能提供宝贵的参考资料。 其他说明:文章不仅限于理论讲解,还包括了许多来自一线的实际案例和经验教训,使读者能够更好地理解和应用所学知识。

    自动化测试与脚本开发_Python3_pynput_键盘鼠标操作录制执行代码生成工具_用于自动化测试_脚本录制_重复操作模拟_宏命令生成_提高工作效率_支持GUI界面_跨平台兼容_.zip

    自动化测试与脚本开发_Python3_pynput_键盘鼠标操作录制执行代码生成工具_用于自动化测试_脚本录制_重复操作模拟_宏命令生成_提高工作效率_支持GUI界面_跨平台兼容_

    嵌入式八股文面试题库资料知识宝典-深入分析Windows和Linux动态库应用异同.zip

    嵌入式八股文面试题库资料知识宝典-深入分析Windows和Linux动态库应用异同.zip

    嵌入式八股文面试题库资料知识宝典-C语言总结.zip

    嵌入式八股文面试题库资料知识宝典-C语言总结.zip

    风储直流微电网母线电压控制策略与双闭环MPPT技术研究

    内容概要:本文详细探讨了风储直流微电网中母线电压控制的关键技术。首先介绍了风储直流微电网的背景和发展现状,强调了母线电压控制的重要性。接着阐述了永磁风机储能并网技术,解释了永磁风机如何通过直接驱动发电机将风能转化为电能,并确保与电网的同步性和稳定性。然后深入讨论了双闭环控制MPPT技术,这是一种通过内外两个闭环控制系统来实现实时调整发电机运行参数的技术,确保风机始终处于最大功率点附近。最后,文章探讨了储能控制母线电压平衡的方法,即通过储能系统的充放电操作来维持母线电压的稳定。结论部分指出,通过这些技术的有机结合,可以实现对风储直流微电网的有效管理和优化控制。 适合人群:从事新能源技术研发的专业人士、电气工程研究人员、风电系统工程师。 使用场景及目标:适用于希望深入了解风储直流微电网母线电压控制策略的研究人员和技术人员,旨在帮助他们掌握最新的控制技术和方法,以提高系统的稳定性和效率。 其他说明:文章还对未来风储直流微电网的发展进行了展望,指出了智能化和自动化的趋势,以及储能技术的进步对系统性能的影响。

    嵌入式八股文面试题库资料知识宝典-C++object-oriented.zip

    嵌入式八股文面试题库资料知识宝典-C++object-oriented.zip

    【操作系统开发】HarmonyOS目录结构详解:构建高效开发环境与跨设备协同应用

    内容概要:文章详细介绍了HarmonyOS的目录结构及其重要性,从整体框架到核心目录的具体功能进行了全面剖析。HarmonyOS凭借其分布式架构和跨设备协同能力迅速崛起,成为全球操作系统领域的重要力量。文章首先概述了HarmonyOS的背景和发展现状,强调了目录结构对开发的重要性。接着,具体介绍了根目录文件、AppScope、entry和oh_modules等核心目录的功能和作用。例如,AppScope作为全局资源配置中心,存放应用级的配置文件和公共资源;entry目录是应用的核心入口,负责源代码和界面开发。此外,文章还对比了HarmonyOS与Android、iOS目录结构的异同,突出了HarmonyOS的独特优势。最后,通过旅游应用和电商应用的实际案例,展示了HarmonyOS目录结构在资源管理和代码组织方面的应用效果。; 适合人群:具备一定编程基础,尤其是对移动操作系统开发感兴趣的开发者,包括初学者和有一定经验的研发人员。; 使用场景及目标:①帮助开发者快速理解HarmonyOS的目录结构,提高开发效率;②为跨设备应用开发提供理论和技术支持;③通过实际案例学习资源管理和代码组织的最佳实践。; 其他说明:HarmonyOS的目录结构设计简洁明了,模块职责划分明确,有助于开发者更好地管理和组织代码和资源。随着万物互联时代的到来,HarmonyOS有望在开发便利性和生态建设方面取得更大进展,吸引更多开发者加入其生态系统。

    飞轮储能充放电控制Simulink仿真模型:基于永磁同步电机的矢量控制与dq轴解耦

    内容概要:本文详细介绍了飞轮储能充放电控制的Simulink仿真模型,重点在于采用永磁同步电机的矢量控制和dq轴解耦控制策略。充电时,外环控制转速,内环控制dq轴电流;放电时,外环控制直流母线电压,内环同样控制dq轴电流。文中还讨论了硬件与软件环境的选择,以及仿真模型的调试与运行情况,最终得出该模型具有良好的跟随性能和波形完美度。 适用人群:从事电力电子系统、储能技术和Simulink仿真的研究人员和技术人员。 使用场景及目标:适用于需要对飞轮储能系统进行深入研究和仿真的场合,旨在提高充放电效率和稳定性,满足不同应用场景的需求。 其他说明:该仿真模型已调试完成,可以直接用于进一步的研究和实际应用,为未来的飞轮储能技术研发提供了有价值的参考。

    嵌入式八股文面试题库资料知识宝典-北京瑞德方科技.zip

    嵌入式八股文面试题库资料知识宝典-北京瑞德方科技.zip

    嵌入式八股文面试题库资料知识宝典-同方万维硬件测试工程师.zip

    嵌入式八股文面试题库资料知识宝典-同方万维硬件测试工程师.zip

    1_15套python PDF格式.zip

    1_15套python PDF格式.zip

    三相三电平整流器仿真:基于电压电流双闭环控制与SPWM调制的性能分析

    内容概要:本文详细介绍了三相三电平整流器的仿真过程及其性能分析。文中首先概述了三相三电平整流器的基本概念及其在电力系统中的重要作用,接着重点探讨了电压电流双闭环控制方式的工作原理和优势,以及SPWM调制技术的具体应用。通过仿真文件展示了整流器在不同条件下的响应情况,验证了这两种技术的有效性和优越性。最后,作者表达了对未来实际应用的期望。 适合人群:从事电力电子研究的技术人员、高校相关专业师生、对电力控制系统感兴趣的工程爱好者。 使用场景及目标:适用于希望深入了解三相三电平整流器工作原理和技术细节的研究人员;目标是在理论基础上掌握电压电流双闭环控制和SPWM调制的实际应用方法。 其他说明:本文提供的仅为仿真文件,未涉及实物实验数据。

    嵌入式八股文面试题库资料知识宝典-恒光科技.zip

    嵌入式八股文面试题库资料知识宝典-恒光科技.zip

    嵌入式八股文面试题库资料知识宝典-北京天华威视科技有限公司面试题.zip

    嵌入式八股文面试题库资料知识宝典-北京天华威视科技有限公司面试题.zip

    嵌入式八股文面试题库资料知识宝典-微软研究院笔试题目的答案.zip

    嵌入式八股文面试题库资料知识宝典-微软研究院笔试题目的答案.zip

    Arduino UART实验例程【正点原子EPS32S3】

    Arduino UART实验例程,开发板:正点原子EPS32S3,本人主页有详细实验说明可供参考。

    嵌入式八股文面试题库资料知识宝典-朝歌数码.zip

    嵌入式八股文面试题库资料知识宝典-朝歌数码.zip

    嵌入式八股文面试题库资料知识宝典-Cortex系列.zip

    嵌入式八股文面试题库资料知识宝典-Cortex系列.zip

    嵌入式八股文面试题库资料知识宝典-中科中科长青笔试题.zip

    嵌入式八股文面试题库资料知识宝典-中科中科长青笔试题.zip

    智能车辆自适应巡航ACC与纵向跟车避撞的分层式控制及模糊权重调整策略

    内容概要:本文详细介绍了自适应巡航(ACC)控制和纵向跟车避撞控制的分层式控制策略。上层控制通过建立离散跟车运动学模型和基于反馈校正的跟车预测模型,获得期望加速度;下层控制则根据上层提供的数据计算期望制动压力和节气门开度。文中特别强调了引入松弛因子进行多目标优化求解,以及利用模糊控制动态调整权重系数的方法,如车间距误差权重系数q_Δd、两车相对速度权重系数q_vrel和自车加速度权重系数q_ar。通过这种方式,系统能够在复杂多变的道路环境中保持灵活性和稳定性。仿真结果显示,在前车以50~70km/h的正弦速度变化行驶的情况下,自车能够平稳跟车,各项参数变化平稳。 适合人群:从事智能车辆研究的技术人员、自动驾驶领域研究人员、高校相关专业师生。 使用场景及目标:适用于智能车辆系统的设计与开发,特别是需要提升ACC系统性能的研究项目。目标是提高驾驶的安全性、舒适性和经济性。 其他说明:实验基于Matlab/Simulink 2021a和Carsim 2019.0版本完成,提供了完整的运行视频和参考资料。

Global site tag (gtag.js) - Google Analytics