toString 方法来自于Object 类,作用是:返回一个字符串,是该Java对象的内存地址经过哈希算法得出的int类型的值在转换成十六进制。
不写直接调用
ackage com.zout.toString;
public class Test {
public static void main(String[] args){
Object zt = new Object();
System.out.println(zt.toString());
}
}
输出结果:java.lang.Object@7852e922
写了再调用
//重写tostring方法
@Override
public String toString() {
return "toStringTest [name=" + name + ", sex=" + sex + ", No=" + No + "]";
}
这是有tostring重写实体类的时候!
调用实体类返回的是:toStringTest [name=zout, sex=man, No=1]
总结
返回的就是我们正常的业务代码。我们在写java实体类的时候,往往要返回的是对象和值,所以习惯性都要加一个tostring方法。
重写toString是对对象在打印输出时候的一种格式化。这样做符合业务逻辑,显示结果人性化。当你print一个对象是你需要这个对象在打印时展现的是什么形态你就把toString重写成你需要的返回形态。
下面这样就可以,注意一个是list的初始化和map的初始化
List<Map<String, String>> ListMap = new ArrayList<>();
// Map map = new HashMap<>();这样不行
//由于是在循环外创建对象,对象所以在循环中的赋值,对于对象来说是共享的,对象只创建了一个,指向同一地址。
for (String sql : sqlList) {
Map<String, String> map = new HashMap<>();
for (int i = 0; i < columnExprs.size(); i++) {
map.put(columnExprs.get(i).toString(),valueExprList.get(i).toString());
}
ListMap.add(map);
}
String 字符串常量
StringBuffer 字符串变量(线程安全)
StringBuilder 字符串变量(非线程安全)
String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,那速度是一定会相当慢的。
//这里循环里面要常改变sb这个的值,所以用StringBuffer
StringBuffer sb = new StringBuffer();
List<String> list = new ArrayList<String>();
for(SQLExpr expr:columnExprs){
expr.output(sb);
list.add(sb.toString());
sb.delete(0,sb.length());
}
而如果是使用 StringBuffer 类则结果就不一样了,每次结果都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,再改变对象引用。
StringBuilder是JDK1.5发布的,它和StringBuffer本质上没什么区别,就是去掉了保证线程安全的那部分,减少了开销。
一、采用Object.toString()
toString方法是java.lang.Object对象的一个public方法。在java中任何对象都会继承Object对象,所以一般来说任何对象都可以调用toString这个方法。这是采用该种方法时,派生类会覆盖Object里的toString()方法。但是在使用该方法时要注意,必须保证Object不是null值,否则将抛出NullPointerException异常。
二、采用(String)Object
该方法是一个标准的类型转换的方法,可以将Object转换为String。但是在使用该方法是要注意的是需要转换的类型必须是能够转换为String的,否则会出现CalssCastException异常错误。
复制代码代码如下:
Object o = new Integer(100);
String string = (String)o;
这段程序代码会出现java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String。因为将Integer类型强制转换为String类型,无法通过。
三、String.valueOf(Object)
上面我们使用Object.toString()方法时需要担心null问题。但是使用该方法无需担心null值问题。因为在使用String.valueOf(Object)时,它会判断Object是否为空值,如果是,则返回null。下面为String.valueOf(Object)的源码:
复制代码代码如下:
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
从上面我们可以看出两点:一是不需要担心null问题。二是它是以toString()方法为基础的。
但是一定要注意:当object为null时,String.valueOf(object)的值是字符串对象:“null”,而不是null!!
List<CsfSrvServiceParam> CsfParam = new ArrayList<CsfSrvServiceParam>();
List<CsfSrvServiceInfo> CsfServiceinfo = new ArrayList<CsfSrvServiceInfo>();
List<CsfRegisterbycodeInfo> registerbycodeInfo = new ArrayList<CsfRegisterbycodeInfo>();
//根据sql的前缀提取三个表的list
//下面这个工具类就是对传入的3哥list处理,往里面加入值。这时候外边这个类的list就有值了。
CSFBeanUtils.getCSFServiceBeanList(insertSqls,CsfParam,CsfServiceinfo,registerbycodeInfo);
//拿到三个list之后 分出每个list的service信息 入审核表
System.out.println(CsfParam);
IO流概念
流是从一端到另一端,连接了源头和目的地。
IO流可以理解为连接程序与文件/数组/网络连接/数据库。
(1)按流向分类:
输入流
输出流
(2)按处理数据不同分类:
字节流:二进制,可以处理一切文件,包括:纯文本、doc、音频、视频等。
字符流:文本文件,只能处理纯文本。
流的本质就是数据传输
虽然不会影响运行效果,但也要处理,比如加泛型,jsonArray(阿里的fastjson),来转换数据类型这些。