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)); } }
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
相关推荐
解决mongo数据插入时 报错问题 mogodb插入数据时报错Can't find a codec for class java.math.BigDecimal
- **异常路径**:`java.lang.Object -> java.lang.Throwable -> java.lang.Exception -> java.lang.RuntimeException -> java.lang.IndexOutOfBoundsException -> java.lang.ArrayIndexOutOfBoundsException` ...
当 BigDecimal 的值超过 Integer 的最大值 `Integer.MAX_VALUE`(即 `2^31 - 1`),调用 `intValue()` 方法时,会抛出 `java.lang.ArithmeticException`,提示“Out of range”。例如: ```java BigDecimal ...
《深入剖析Java.lang.Number类》 Java.lang.Number是Java编程语言中的一个抽象基类,它为所有数值类型提供了基础框架。Number类的主要作用是提供一套通用的方法,将表示的数值转换为不同类型的值,如byte、double、...
* @return java.lang.String * @author xm * @create 2018/6/7 12:03 **/ public static String format2point(Number value) { return df.format(value); } public static Double add(Number value1, ...
java.math 提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。 java.net 为实现网络应用程序提供类。 java.nio 定义作为数据容器的缓冲区,并提供其他 NIO 包的概述。 java.nio....
Java.lang包是Java编程语言的核心库之一,它包含了一些最基础和最重要的类,这些类为所有其他Java程序提供了基本服务。在"JBuider第六章:Java.lang包"的教程中,你可能会深入学习到以下几个关键知识点: 1. **基础...
在 Java 中,还有其他类型,如 java.math.BigDecimal、java.sql.Year 等类型。在 MySql 中,也有其他类型,如 YEAR、DECIMAL 等类型。其中,YEAR 类型用于存储年份,DECIMAL 类型用于存储小数。 Java 数据类型和 ...
**JAVA类型:** `java.lang.String` **JDBC类型:** 12 **描述:** `VARCHAR` 是一种用于存储可变长度字符串的数据类型。L代表最大长度,N表示默认值或额外的长度。在Java中,它通常被映射为 `String` 类型。 ##### ...
java.math 提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。 java.net 为实现网络应用程序提供类。 java.nio 定义作为数据容器的缓冲区,并提供其他 NIO 包的概述。 java.nio....
- `java.math.BigDecimal` 通常用于处理高精度的数值,对应 SQL 的 `NUMERIC` 或 `DECIMAL` 3. **字符和字符串类型**: - `char` 和 `java.lang.Character` 对应于 SQL 的 `CHAR(1)` - `java.lang.String` 对应...
- `java.math.BigDecimal` - `java.lang.ThreadLocal` - `java.lang.ClassLoader` 和 `java.net.URLClassLoader` - `java.util.ArrayList`、`java.util.LinkedList` - `java.util.HashMap`、`java.util....
* java.lang.management 是 Java 2 Platform 的一部分,提供了管理接口,用于监视和管理 Java 虚拟机以及 Java 虚拟机在其上运行的操作系统。 18、引用对象:java.lang.ref 提供了引用对象类,支持在某种程度上与...
Java.lang 包是 Java 最广泛使用的包之一,其中包含了很多基础且重要的类和接口。下面重点介绍两个非常重要的类——`String` 类和 `StringBuffer` 类: ##### 1. String 类 - **特性**:不可变性,即一旦创建后...
`java.math` 包提供高精度的数学运算,如 `BigInteger` 和 `BigDecimal`。 `java.net` 包提供了网络编程的类,如 `Socket`, `ServerSocket`, `URL`。 `java.nio` 包定义了缓冲区、通道和选择器,支持非阻塞 I/O。 ...
6. 浮点型(FLOAT、DOUBLE)及小数型(DECIMAL):分别对应Java中的`java.lang.Float`、`java.lang.Double`以及`java.math.BigDecimal`,JDBC类型分别为7、8、3,适用于需要高精度数值运算的场景。 7. **BOOLEAN**...
- `java.lang.ClassCastException`:当对象实例不能被转换为指定类型时抛出。 对于每种异常类型,都需要根据具体情况进行分析和处理。了解这些异常并知道如何妥善处理它们,可以帮助开发者编写更健壮、更可靠的Java...
- `decimal`, `money`, `smallmoney`, `numeric`: 使用 `java.math.BigDecimal` 类来表示。 - `real`: 使用 `java.lang.Float` 类来表示。 #### 4. 布尔值 - **SQL Server 数据库类型**: `bit` - **Java 对应类型...
java.math 提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。 java.net 为实现网络应用程序提供类。 java.nio 定义作为数据容器的缓冲区,并提供其他 NIO 包的概述。 java.nio....
- `java.lang.BigDecimal` - `java.lang.BigInteger` - `java.lang.Boolean` - `java.lang.Byte` - `java.lang.Character` - `java.lang.Class` - `java.lang.Double` - `java.lang.Float` - `java.lang.Integer` - ...