数值转List
String[] arr=new String[]{"1","2","3"};
//数组转List的坑
List<String> list = Arrays.asList(arr);
System.out.println(list.add("1"));
Arrays.asList得到的是一个内部类,不是util下的ArrayList,没有实现add方法,执行会出现如下异常
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.add(AbstractList.java:148)
at java.util.AbstractList.add(AbstractList.java:108)
at com.test.utils.CloneTest.main(CloneTest.java:26)
正确的写法
String[] arr=new String[]{"1","2","3"};
List<String> lst=new ArrayList<String>(Arrays.asList(arr));
System.out.print(lst);
执行contain方法不会出现问题:
//List是否包含一个字符串的比较
String[] arr=new String[]{"1","2","3"};
System.out.print(Arrays.asList(arr).contains("3"));
参考
http://mp.weixin.qq.com/s?__biz=MzIzMzgxOTQ5NA==&mid=2247487301&idx=2&sn=9b3c815120343d2f73370f335189f5f5&chksm=e8fe934cdf891a5a81025b456402a715daf80f45f29a1db53d9526b4181d6045462b8394137b&mpshare=1&scene=24&srcid=#rd
int与Integer
//-128~127之间通过Integer var这种写法将会复用内存中值相同的对象测试
Integer a=new Integer(1);
Integer b=new Integer(1);
//false---指向的是不同的内存空间
System.out.println(a==b);
//true---值相同
System.out.println(a.equals(b));
System.out.println("--------------------");
//-128~127之间通过Integer var这种写法将会复用内存中值相同的对象
Integer c=1;
Integer d=1;
//true--复用值相同的对象
System.out.println(c==d);
//true--值相同
System.out.println(c.equals(d));
System.out.println("---------------------");
Integer g=1111;
Integer h=1111;
//false--不在-128~127之间,会再次new对象
System.out.println(g==h);
//true--值相同
System.out.println(g.equals(h));
//参考https://blog.youkuaiyun.com/alan_gaohaodong/article/details/80720704
System.out.println("-------------------");
Integer e=new Integer(1111);
Integer f=new Integer(1111);
//false--指向的是不同的内存空间
System.out.println(e==f);
//true--值相同
System.out.println(e.equals(f));
BigDecimal
double a=1.1;
BigDecimal aD=new BigDecimal(a);
//--不等于1.100000000000000088817841970012523233890533447265625
System.out.println(aD);
double b=1.1;
BigDecimal bD = BigDecimal.valueOf(b);
//得到1.1
System.out.println(bD);
//因为不是所有的浮点数都能够被精确的表示成一个double 类型值,有些浮点数值不能够被精确的表示成 double 类型值,
// 因此它会被表示成与它最接近的 double 类型的值。必须改用传入String的构造方法。这一点在BigDecimal类的构造方法注释中有说明。
BigDecimal c = new BigDecimal(""+1.1);
//得到1.1
System.out.println(c);
Integer d1=1;
BigDecimal d=new BigDecimal(d1);
//得到1
System.out.println(d);
//加法
//new BigDecimal(0)).add(BigDecimal.valueOf(defaultValueRate))
//减法
BigDecimal subtract = BigDecimal.valueOf(1).subtract(BigDecimal.valueOf(2));
System.out.println(subtract);
//乘法
double callDuration = BigDecimal.valueOf(Double.parseDouble("0.3"))
.multiply(BigDecimal.valueOf(60)).setScale(1, BigDecimal.ROUND_UP).doubleValue();
System.out.println(callDuration);
//除法
//保留小数位--保留4位--小数点向右移动
float v = new BigDecimal(1).divide(new BigDecimal(3), 4,
BigDecimal.ROUND_HALF_UP).movePointRight(2).floatValue();
System.out.println(v);
比较
BigDecimal a=BigDecimal.valueOf(3);
BigDecimal b=BigDecimal.valueOf(5);
System.out.println(a.compareTo(b));
参考//https://blog.youkuaiyun.com/haiyinshushe/article/details/82721234
https://mp.weixin.qq.com/s/auHwSBBuBXLNrdk1yQEQ6Q
BeanUtils.copyProperties,如果对象内存在嵌套对象,那么复制的是地址,不是一个新的对象。
pojo
public static class User {
private int i;
private Integer id;
private String userName;
private User sonUser;
public User() {
}
public User(Integer id,String userName) {
this.id=id;
this.userName = userName;
}
public int getI() {
return i;
}
public void setI(int i) {
this.i = i;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public User getSonUser() {
return sonUser;
}
public void setSonUser(User sonUser) {
this.sonUser = sonUser;
}
}
/**
* BeanUtils.copyProperties List类型变量还是指向一块内存区域
*/
@Test
public void test01(){
Page<User> page1=new Page<>();
page1.setTotal(100);
page1.setSize(10);
page1.setCurrent(1);
page1.setRecords(Stream.of(new User(1,"u1")).collect(Collectors.toList()));
Page<User> page2=new Page<>();
BeanUtils.copyProperties(page1, page2);
page1.setTotal(101);
page1.getRecords().add(new User(2,"u2"));
//records中有新加入的User对象
// [{"i":0,"id":1,"userName":"u1"},{"i":0,"id":2,"userName":"u2"}]
System.out.println(JSON.toJSONString(page2.getRecords()));
// 100 不变
System.out.println(page2.getTotal());
}
@Test
public void test02(){
User user01=new User(1,"u1");
user01.setSonUser(new User(111, "u111"));
User user02=new User();
BeanUtils.copyProperties(user01, user02);
user01.setId(11);
user01.setUserName("u11");
user01.getSonUser().setUserName("u111111111");
user01.getSonUser().setId(111111111);
//嵌套对象中的值均改变了
// {"i":0,"id":1,"sonUser":{"i":0,"id":111111111,"userName":"u111111111"},"userName":"u1"}
System.out.println(JSON.toJSONString(user02));
}
方法中改变对象值
@Test
public void test03(){
User user=new User(1, "u1");
user.setI(1);
user.setSonUser(new User(111111111, "sonU11111111"));
changeUser(user);
//值均改变了
// {"i":2,"id":11,"sonUser":{"i":0,"id":222222,"userName":"sonU222222"},"userName":"u11"}
System.out.println(JSON.toJSONString(user));
}
public static void changeUser(User user){
user.setI(2);
user.setId(11);
user.setUserName("u11");
user.getSonUser().setId(222222);
user.getSonUser().setUserName("sonU222222");
}
jackson引入问题
// @com.fasterxml.jackson.annotation.JsonProperty("username")
@org.codehaus.jackson.annotate.JsonProperty("username")
private String userName;
public static void main(String[] args) throws IOException {
UserDO userDO = new UserDO();
userDO.setUserName("张三");
// System.out.println(new com.fasterxml.jackson.databind.ObjectMapper().writeValueAsString(userDO));
// System.out.println(new org.codehaus.jackson.map.ObjectMapper().writeValueAsString(userDO));
//@com.fasterxml.jackson.annotation.JsonProperty("username")
//{"username":"张三"}
//{"userName":"张三"}
//@org.codehaus.jackson.annotate.JsonProperty("username")
//{"userName":"张三"}
//{"username":"张三","userName":"张三"}
System.out.println(new com.fasterxml.jackson.databind.ObjectMapper().readValue("{\"username\":\"张三\"}", UserDO.class));
System.out.println(new org.codehaus.jackson.map.ObjectMapper().readValue("{\"username\":\"张三\"}", UserDO.class));
//@com.fasterxml.jackson.annotation.JsonProperty("username")
//UserDO(userName=张三)
//出现异常 Exception in thread "main" org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "username"
//@org.codehaus.jackson.annotate.JsonProperty("username")
//出现异常 Exception in thread "main" com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "username" (class com.sd.lead.core.domain.dto.wechat.enterprise.UserDO), not marked as ignorable (one known property: "userName"])
// at [Source: (String)"{"username":"张三"}"; line: 1, column: 14] (through reference chain: com.sd.lead.core.domain.dto.wechat.enterprise.UserDO["username"])
}
引入的时候用【com.fasterxml.jackson】前缀的包,【org.codehaus.jackson】是旧的版本。