stringbuilder

Assigning null to variable in finally block [duplicate]

做~自己de王妃 提交于 2019-12-02 14:24:10
This question already has an answer here: Does a finally block always get executed in Java? 47 answers The output of the following piece of code is "Test Passed"; can someone explain to me why ? public class Test { public static void main(String args[]) { System.out.println(new Test().print()); } protected StringBuilder print() { StringBuilder builder = new StringBuilder(); try { builder.append("Test "); return builder.append("Passed!!!"); } finally { builder = null; } } Basically, what Java does is the following: StringBuilder valueToReturn = builder.append("Passed!!!"); executeFinallyBlock()

When is `StringBuilder` is preferred instead appending `String` to `String`? [duplicate]

扶醉桌前 提交于 2019-12-02 13:03:17
问题 This question already has answers here : StringBuilder vs String concatenation in toString() in Java (18 answers) When to use StringBuilder in Java [duplicate] (9 answers) Closed 6 years ago . Below are two ways how to append String : String firstString = "text_0"; String secondString = "text_1"; String resultString = firstString + secondString; StringBuilder sb = new StringBuilder(); sb.append(firstString).append(secondString); String resultString = sb.toString(); My question is - when is

Java代码优化建议

筅森魡賤 提交于 2019-12-02 10:46:34
总结日常Java开发常见优化策略,持续更新。 尽可能使用局部变量 调用方法时传递的参数以及在调用中创建的临时变量都保存在栈中,速度较快,其他变量,如静态变量、实例变量等,都在堆中创建,速度较慢。另外,栈中创建的变量,随着方法的运行结束,这些内容就没了,不需要额外的垃圾回收。 及时关闭流 Java编程过程中,进行数据库连接、I/O流操作时务必小心,在使用完毕后,及时关闭以释放资源。因为对这些大对象的操作会造成系统大的开销,稍有不慎,将会导致严重的后果。而释放资源最好的地方就是 finally 代码块。 尽量减少对变量的重复计算 明确一个概念,对方法的调用,即使方法中只有一句语句,也是有消耗的,包括创建栈帧、调用方法时保护现场、调用方法完毕时恢复现场等。所以例如下面的操作: for (int i = 0; i < list.size(); i++){ ... } 建议替换为: for (int i = 0, length = list.size(); i < length; i++){ ... } 这样,在list.size()很大的时候,就减少了很多的消耗 尽量采用懒加载的策略,即在需要的时候才创建 例如: String str = "aaa"; if (i == 1){   list.add(str); } 建议替换为: if (i == 1){   String str =

How does reduce() method work with parallel streams in Java 8?

半城伤御伤魂 提交于 2019-12-02 08:41:58
I try to understand how reduce() method works exactly with parallel streams and I don't understand why the following code do not return the concatenation of these strings. This is the code: public class App { public static void main(String[] args) { String[] grades = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K"}; StringBuilder concat = Arrays.stream(grades).parallel() .reduce(new StringBuilder(), (sb, s) -> sb.append(s), (sb1, sb2) -> sb1.append(sb2)); System.out.println(concat); } } The code works only with sequential streams, but with parallel streams it doesn't return the

MultipartFile 转 File

风流意气都作罢 提交于 2019-12-02 08:12:36
public static File multipartFileToFile(MultipartFile file, String bh) throws Exception { if (file.getSize() <= 0) { return null; } File toFile = null; // 用户主目录 String userHome = System.getProperties().getProperty("user.home"); StringBuilder filepath = new StringBuilder(); filepath.append(userHome).append(File.separator).append("files").append(File.separator).append(bh).append(File.separator); //创建文件夹 toFile = new File(filepath.toString()); FileUtils.forceMkdir(toFile); //创建文件,此时文件为空 filepath.append(file.getOriginalFilename()); toFile = new File(filepath.toString()); //为文件添加流信息 file.transferTo

java代码性能优化总结

a 夏天 提交于 2019-12-02 05:45:45
1、尽量指定类、方法的final修饰符 带有final修饰符的类是不可派生的。在Java核心API中,有许多应用final的例子,例如java.lang.String,整个类都是final的。为类指定final修饰符可以让类不可以被继承,为方法指定final修饰符可以让方法不可以被重写。如果指定了一个类为final,则该类所有的方法都是final的。Java编译器会寻找机会内联所有的final方法,内联对于提升Java运行效率作用重大,具体参见Java运行期优化。此举能够使性能平均提高50%。 2、尽量重用对象 特别是String对象的使用,出现字符串连接时应该使用StringBuilder/StringBuffer代替。由于Java虚拟机不仅要花时间生成对象,以后可能还需要花时间对这些对象进行垃圾回收和处理,因此,生成过多的对象将会给程序的性能带来很大的影响。 3、尽可能使用局部变量 调用方法时传递的参数以及在调用中创建的临时变量都保存在栈中速度较快,其他变量,如静态变量、实例变量等,都在堆中创建,速度较慢。另外,栈中创建的变量,随着方法的运行结束,这些内容就没了,不需要额外的垃圾回收。 4、及时关闭流 Java编程过程中,进行数据库连接、I/O流操作时务必小心,在使用完毕后,及时关闭以释放资源。因为对这些大对象的操作会造成系统大的开销,稍有不慎,将会导致严重的后果。 5

C# 计算字符串MD5值

不羁的心 提交于 2019-12-02 05:44:47
public class GetMd5Hash : MonoBehaviour { // Start is called before the first frame update void Start() { Debug.Log(GetMd5HashString("Hello World")); } string GetMd5HashString(string input) { if (string.IsNullOrEmpty(input)) return null; MD5 md5Hash = MD5.Create(); // 将输入字符串转换为字节数组并计算哈希数据 byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(input)); // 创建一个 Stringbuilder 来收集字节并创建字符串 StringBuilder sb = new StringBuilder(); // 循环遍历哈希数据的每一个字节并格式化为十六进制字符串 for (int i = 0; i < data.Length; i++) { sb.Append(data[i].ToString("x2")); } return sb.ToString(); } } 来源: https://blog.csdn.net/u014732824

Java面试汇总

喜你入骨 提交于 2019-12-02 05:32:30
首先,感谢这篇文章的作者分享! 本文分为十九个模块,分别是: Java 基础、容器、多线程、反射、对象拷贝、Java Web 、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、MyBatis、RabbitMQ、Kafka、Zookeeper、MySQL、Redis、JVM ,如下图所示: 共包含 208 道面试题,本文的宗旨是为读者朋友们整理一份详实而又权威的面试清单,下面一起进入主题吧。 Java 基础 1. JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,Java 开发工具包,提供了 Java 的开发环境和运行环境。 JRE:Java Runtime Environment 的简称,Java 运行环境,为 Java 的运行提供了所需环境。 具体来说 JDK 其实包含了 JRE,同时还包含了编译 Java 源码的编译器 Javac,还包含了很多 Java 程序调试和分析的工具。简单来说:如果你需要运行 Java 程序,只需安装 JRE 就可以了,如果你需要编写 Java 程序,需要安装 JDK。 2. == 和 equals 的区别是什么? == 解读 对于基本类型和引用类型 == 的作用效果是不同的,如下所示: 基本类型:比较的是值是否相同; 引用类型

JVM笔记:Java虚拟机的常量池

别说谁变了你拦得住时间么 提交于 2019-12-02 05:09:34
这篇文章主要是做一个总结,将查找到相关的资料自己做一个整理,最后会列出查找过的相关资料,感兴趣的可以去翻一翻。 常量池 class文件常量池(class constant pool) 常量池可以理解为Class文件之中的资源仓库,它是Class文件结构中与其他项目关联最多的数据类型,包含了类也是占用Class文件中第一个出现的表类型数据项目。 常量池中主要存放两大类常量:字面量(Literal)和符号引用(Symbolic References)。字面量比较接近于Java语言层面的常量概念,如文本字符串、声明为final的常量值等。而符号引用则属于编译原理方面的概念,包含了下面三类常量: 类和接口的全限定名(Full Qualified Name) 字段的名称和描述符(Descriptor) 方法的名称和描述符 类和接口的全限定名,例如: com/example/demo/Demo.class 字段的名称和描述符,例如: Field a:[Ljava/lang/String 方法的名称和描述符,例如: Method java/lang/String."<init>":(Ljava/lang/String;)V 后两个是字节码指令,不懂得可以查阅下相关资料(TODO) + 可以通过查看字节码的形式来查看Class的常量池的内容,因为是在编译时产生的,也可以称为 静态常量池 。

MD5加密

和自甴很熟 提交于 2019-12-02 01:52:27
/// <summary> /// MD5加密,需要引用库文件using System.Security.Cryptography; /// </summary> /// <param name="password"></param> /// <returns></returns> private string MD5Password(string password) { //using System.Security.Cryptography; MD5CryptoServiceProvider md5Hasher = new MD5CryptoServiceProvider(); byte[] hashedDataBytes; hashedDataBytes = md5Hasher.ComputeHash(Encoding.GetEncoding("gb2312").GetBytes(password)); StringBuilder tmp = new StringBuilder(); foreach (byte i in hashedDataBytes) { tmp.Append(i.ToString("x2")); } return tmp.ToString(); } 来源: https://www.cnblogs.com/LynnXue/p/11724239.html