java面试题String,StringBuilder,StringBuffer

JAVA大厂面试题-----String、StringBuffer 和 StringBuilder String、StringBuffer 和 StringBuilder 阅读详情
     面试的经历中,相信大家都经常被问到这三者的区别,说到String我相信绝大多数的人都会说:"String是不可变的,final修饰的",你会看到面试官微微猥琐一笑,接着问到:“final修饰的类就是不可变的吗,那StringBuilder和StringBuffer不是final修饰的?”


1. 先来说说String


看下JDK1.7 String成员变量的源码

  1. /** 
  2.  * @author  Lee Boynton 
  3.  * @author  Arthur van Hoff 
  4.  * @author  Martin Buchholz 
  5.  * @author  Ulf Zibis 
  6.  * @see     java.lang.Object#toString() 
  7.  * @see     java.lang.StringBuffer 
  8.  * @see     java.lang.StringBuilder 
  9.  * @see     java.nio.charset.Charset 
  10.  * @since   JDK1.0 
  11.  */  
  12.   
  13. public final class String  
  14.     implements java.io.Serializable, Comparable<String>, CharSequence {  
  15.     /** The value is used for character storage. */  
  16.     private final char value[];  
  17.   
  18.     /** Cache the hash code for the string */  
  19.     private int hash; // Default to 0  
  20.   
  21.     /** use serialVersionUID from JDK 1.0.2 for interoperability */  
  22.     private static final long serialVersionUID = -6849794470754667710L;  

可以看到String定义的成员变量value和hash,其中value是个字节数组,而且是final修饰,这个才是String不可变的关键点;

JDK1.7 String的部分注解

  1. The Java language provides special support for the string  
  2. * concatenation operator ( + ), and for conversion of  
  3. * other objects to strings. String concatenation is implemented  
  4. * through the <code>StringBuilder</code>(or <code>StringBuffer</code>)  
  5. * class and its <code>append</code> method.  
  6. * String conversions are implemented through the method  
  7. * <code>toString</code>, defined by <code>Object</code> and  
  8. * inherited by all classes in Java. For additional information on  
  9. * string concatenation and conversion, see Gosling, Joy, and Steele,  
  10. * <i>The Java Language Specification</i>.  
上面解释了java为String提供了特殊的支持,例如:String a="a";  String b="b" ;当执行String c=a+b操作时,实际上是创建一个StringBuilder对象,再通过apend()进行拼接,最后调用toStirng()生成一个新的对象给c。

String提供修改内容的方法最终都是调用new String()。看下 String的部分注解

  1. /**  
  2.  * The <code>String</code> class represents character strings. All  
  3.  * string literals in Java programs, such as <code>"abc"</code>, are  
  4.  * implemented as instances of this class.  
  5.  * <p>  
  6.  * Strings are constant; their values cannot be changed after they  
  7.  * are created. String buffers support mutable strings.  
  8.  * Because String objects are immutable they can be shared. For example:  
  9.  * <p><blockquote><pre>  
  10.  *     String str = "abc";  
  11.  * </pre></blockquote><p>  
  12.  * is equivalent to:  
  13.  * <p><blockquote><pre>  
  14.  *     char data[] = {'a', 'b', 'c'};  
  15.  *     String str = new String(data);  
  16.  * </pre></blockquote><p>  
  17.  * Here are some more examples of how strings can be used:  

这里定义了一个String str = "abc";相当于char data[] = {'a', 'b', 'c'};String str = new String(data);
再来看一个substring()方法的源码


  1. /** 
  2.      * Returns a new string that is a substring of this string. The 
  3.      * substring begins at the specified <code>beginIndex</code> and 
  4.      * extends to the character at index <code>endIndex - 1</code>. 
  5.      * Thus the length of the substring is <code>endIndex-beginIndex</code>. 
  6.      * <p> 
  7.      * Examples: 
  8.      * <blockquote><pre> 
  9.      * "hamburger".substring(4, 8) returns "urge" 
  10.      * "smiles".substring(1, 5) returns "mile" 
  11.      * </pre></blockquote> 
  12.      * 
  13.      * @param      beginIndex   the beginning index, inclusive. 
  14.      * @param      endIndex     the ending index, exclusive. 
  15.      * @return     the specified substring. 
  16.      * @exception  IndexOutOfBoundsException  if the 
  17.      *             <code>beginIndex</code> is negative, or 
  18.      *             <code>endIndex</code> is larger than the length of 
  19.      *             this <code>String</code> object, or 
  20.      *             <code>beginIndex</code> is larger than 
  21.      *             <code>endIndex</code>. 
  22.      */  
  23.     public String substring(int beginIndex, int endIndex) {  
  24.         if (beginIndex < 0) {  
  25.             throw new StringIndexOutOfBoundsException(beginIndex);  
  26.         }  
  27.         if (endIndex > value.length) {  
  28.             throw new StringIndexOutOfBoundsException(endIndex);  
  29.         }  
  30.         int subLen = endIndex - beginIndex;  
  31.         if (subLen < 0) {  
  32.             throw new StringIndexOutOfBoundsException(subLen);  
  33.         }  
  34.         return ((beginIndex == 0) && (endIndex == value.length)) ? this  
  35.                 : new String(value, beginIndex, subLen);  
  36.     }  


看完这些,你可以清楚的知道定义一个变量str="hello world",则是在内存中分配一个对象new String("hello world"),当你修改str="hello nimei",变量重新指向内存中新分配的new String("hello nimei");原来内存中的new String("hello world")还在那里,没有改变,等待垃圾回收。难道真的没有办法修改new String("hello world")对象中的值而不重新在内存中重新new一次吗?让我们来看看一个例子。



原来通过反射可以修改String对象中的内容,反射太强大了。


2.StringBuffer和StringBuilder


StringBuffer的部分源码

  1. * @author      Arthur van Hoff  
  2.  * @see     java.lang.StringBuilder  
  3.  * @see     java.lang.String  
  4.  * @since   JDK1.0  
  5.  */  
  6.  public final class StringBuffer  
  7.     extends AbstractStringBuilder  
  8.     implements java.io.Serializable, CharSequence  
  9. {  
  10.   
  11.     /** use serialVersionUID from JDK 1.0.2 for interoperability */  
  12.     static final long serialVersionUID = 3388685877147921107L;  
  13.   
  14.     /** 
  15.      * Constructs a string buffer with no characters in it and an 
  16.      * initial capacity of 16 characters. 
  17.      */  
  18.     public StringBuffer() {  
  19.         super(16);  
  20.     }  
  21.   
  22.     /** 
  23.      * Constructs a string buffer with no characters in it and 
  24.      * the specified initial capacity. 
  25.      * 
  26.      * @param      capacity  the initial capacity. 
  27.      * @exception  NegativeArraySizeException  if the <code>capacity</code> 
  28.      *               argument is less than <code>0</code>. 
  29.      */  
  30.     public StringBuffer(int capacity) {  
  31.         super(capacity);  
  32.     }  
  33.   
  34.     /** 
  35.      * Constructs a string buffer initialized to the contents of the 
  36.      * specified string. The initial capacity of the string buffer is 
  37.      * <code>16</code> plus the length of the string argument. 
  38.      * 
  39.      * @param   str   the initial contents of the buffer. 
  40.      * @exception NullPointerException if <code>str</code> is <code>null</code> 
  41.      */  
  42.     public StringBuffer(String str) {  
  43.         super(str.length() + 16);  
  44.         append(str);  
  45.     }  


StringBuilder的部分源码

  1. * @author      Michael McCloskey  
  2.  * @see         java.lang.StringBuffer  
  3.  * @see         java.lang.String  
  4.  * @since       1.5  
  5.  */  
  6. public final class StringBuilder  
  7.     extends AbstractStringBuilder  
  8.     implements java.io.Serializable, CharSequence  
  9. {  
  10.   
  11.     /** use serialVersionUID for interoperability */  
  12.     static final long serialVersionUID = 4383685877147921099L;  
  13.   
  14.     /** 
  15.      * Constructs a string builder with no characters in it and an 
  16.      * initial capacity of 16 characters. 
  17.      */  
  18.     public StringBuilder() {  
  19.         super(16);  
  20.     }  
  21.   
  22.     /** 
  23.      * Constructs a string builder with no characters in it and an 
  24.      * initial capacity specified by the <code>capacity</code> argument. 
  25.      * 
  26.      * @param      capacity  the initial capacity. 
  27.      * @throws     NegativeArraySizeException  if the <code>capacity</code> 
  28.      *               argument is less than <code>0</code>. 
  29.      */  
  30.     public StringBuilder(int capacity) {  
  31.         super(capacity);  
  32.     }  
  33.   
  34.     /** 
  35.      * Constructs a string builder initialized to the contents of the 
  36.      * specified string. The initial capacity of the string builder is 
  37.      * <code>16</code> plus the length of the string argument. 
  38.      * 
  39.      * @param   str   the initial contents of the buffer. 
  40.      * @throws    NullPointerException if <code>str</code> is <code>null</code> 
  41.      */  
  42.     public StringBuilder(String str) {  
  43.         super(str.length() + 16);  
  44.         append(str);  
  45.     }  


StringBuffer和StringBuilder的这部分源码基本一样,构造函数初始化大小都为16,都是继承了AbstractStringBuilder。


看看AbstractStringBuilder定义成员变量的源码

  1. /** 
  2.  * A mutable sequence of characters. 
  3.  * <p> 
  4.  * Implements a modifiable string. At any point in time it contains some 
  5.  * particular sequence of characters, but the length and content of the 
  6.  * sequence can be changed through certain method calls. 
  7.  * 
  8.  * @author      Michael McCloskey 
  9.  * @author      Martin Buchholz 
  10.  * @author      Ulf Zibis 
  11.  * @since       1.5 
  12.  */  
  13. abstract class AbstractStringBuilder implements Appendable, CharSequence {  
  14.     /** 
  15.      * The value is used for character storage. 
  16.      */  
  17.     char[] value;  
  18.   
  19.     /** 
  20.      * The count is the number of characters used. 
  21.      */  
  22.     int count;  
  23.   
  24.     /** 
  25.      * This no-arg constructor is necessary for serialization of subclasses. 
  26.      */  
  27.     AbstractStringBuilder() {  
  28.     }  
  29.   
  30.     /** 
  31.      * Creates an AbstractStringBuilder of the specified capacity. 
  32.      */  
  33.     AbstractStringBuilder(int capacity) {  
  34.         value = new char[capacity];  
  35.     }  


AbstractStringBuilder中定义的变量value,是个字节数组,和String的成员变量value相比,String的value是final修饰的,所以StringBuffer和StringBuilde的内容可以变。


在对比下StingBuffer和StringBuilder的实现其他细节,以append()方法为例。

  1. public synchronized StringBuffer append(String str) {  
  2.        super.append(str);  
  3.        return this;  
  4.    }  
  1. public StringBuilder append(String str) {  
  2.       super.append(str);  
  3.       return this;  
  4.   }  
两者最大的区别是:StingBuffer所有的实现的方法都是sychronized修饰的,StringBuilder则不是。

2.String、StringBuffer和StringBuilder的总结


1).  String和StringBuffer、StringBuilder相比,String是不可变的,String的每次修改操作都是在内存中重新new一个对象出来,而StringBuffer、StringBuilder则不用,并且提供了一定的缓存功能,默认16个字节数组的大小,超过默认的数组长度时,则扩容为原来字节数组的长度*2+2。
2).  StringBuffer和StringBuilder相比,StringBuffer是synchronized的,是线程安全的,而StringBuilder是非线程安全的,单线程情况下性能更好一点;使用StringBuffer和StringBuilder时,可以适当考虑下初始化大小,较少扩容的次数,提高代码的高效性。
DNA pull-down技术避坑指南:从探针设计到质谱验证的完整实验方案 本文提供了一份详尽的DNA pull-down技术实战避坑指南,涵盖从探针设计、生物素标记、磁珠选择与预处理,到结合洗脱优化及下游质谱验证或Western Blot验证的全流程。重点解析了如何通过精细操作降低非特异性结合、提高实验特异性与重复性,并对比了质谱与WB两种验证路径的适用场景,旨在帮助研究者构建稳健可靠的DNA-蛋白质互作研究体系。 阅读详情

相关推荐

数据结构:五岔路口交通管理红绿灯设计

我们可以知道这是一个“图”的着色问题,首先要考虑,为什么可行路线是13条?当然可以通过穷举得出,如果用公式:则是: 或者 因为一条路线必须包括一出一进两个方向 第一种答案的解法: 一、固定E为入口,则有C_4^1=4的可能; 二、除去E(因为E只有一个入向),剩下ABCD四个路口,然后因为C只有一个出方向,所以从剩下 的ABD中选择一个入口,即C_3^1; 三、再从剩下的三个出口任选

潘猫猫的世界 1万+

java面试题----String、StringBuffer和StringBuilder

文章目录前言一、相同点二、不同点引子1、String2、StringBuffer3、StringBuilder总结 前言 String、StringBuffer以及StringBuilder这哥三的区别是面试中经常被问到的问题,回答怎么回答大家都知道,但很少会有人从底层分析为什么不同,今天我会通过底层给大家分析他们的不同 一、相同点 public final class String; public final class StringBuilder; public final class String

ysal4的博客 1131

保姆级教程:在S32DS 3.4上安装S32K3xx RTD 4.4驱动包(附常见安装失败排查)

本文提供在S32DS 3.4上安装S32K3xx RTD 4.4驱动包的详细教程,涵盖环境准备、分步安装指南及常见问题排查。特别针对NXP S32K3系列MCU开发者,解决网络问题、路径配置等安装难点,并分享进阶配置技巧和最佳实践,助力高效开发。

weixin_42696271的博客 287

StringBuilder,Stringbuffer和String相关面试笔试

StringBuilder,Stringbuffer和String的区别与联系,助力你能更好的拿捏offer

bit me的博客 1904

数分实战(01):Global_Superstore数据集解析与商业洞察

本文以Global_Superstore零售数据集为例,手把手指导数据分析实战全流程。从数据清洗、探索性分析到深度商业洞察,详细解析了如何通过Python处理缺失值与异常值,进行销售利润分析、客户细分与地理分析,并探讨了折扣与利润的微妙关系。文章旨在帮助读者建立数据分析思维框架,从数据中挖掘可指导实际业务决策的核心洞察。

weixin_28487433的博客 342

Origin2018(汉化版)在使用科学计数法的时候如何将坐标刻度的0.0改成0

文章目录1 问题2 解决方法 1 问题 先看下面这张图,当我使用科学计数法时,纵坐标出现了0.0的字样,这样看起来很不美观。有些期刊还会有要求,不能出现0.0的格式。 图1 那么该怎么将它改成0呢?首先让我们尝试着用Origin自带的属性,看看能不能设置。 2 解决方法 解决方法一: step1: 双击坐标轴,打开坐标轴属性设置。 step2: 在刻度线标签选项中设置左轴的显示 图2 会发现,按照图2的方式改好之后,其它的小数位也全没了,如果但是有些数字就被覆盖了,这显然不是我

qq_40077565的博客 2万+

彻底弄懂StringBuffer与StringBuilder的区别

一问道StringBuffer与StringBuilder的区别,张口就来StringBuffer是线程安全的,因为它相关方法都加了synchronized 关键字,StringBuilder线程不安全。没错,确实如此,但是我们查看过源码会发现StringBuffer是从jdk1.0就开始了,StringBuilder是从jdk1.5开始的。于是我就产生这样一个疑问,既然已经有了StringBu...

星空的风fly 2万+

高通量测序数据分析:RNA-seq

深度测序相关数据库与数据格式 SRA toolkit 一、NCBI 和EBI、DDBJ组成INSDC,数据内容相同所以找NCBI就行。 (一)NCBI常用数据库 GenBank:遗传序列数据库,收集了所有公开的DNA序列及其注释 GEO (Gene Expression Omnibus) :收集整理各种表达芯片数据,后来加入了甲基化、lncRNA、miRNA、CNV等其他芯片,还有高通量测序数据...

qq_41134363的博客 3万+

Java-String、StringBuffer、StringBuilder区别及相关面试题

在Java编程中,经常会遇到处理字符串的需求。Java提供了多个类来处理字符串,其中最常用的是String、StringBuffer和StringBuilder类。本文将介绍这三个类的基本用法和区别

向诸位大佬虚心学习 5424

ICC 实战解析——CTS 时钟树综合中的关键设置与优化策略

本文深入解析ICC工具中CTS时钟树综合的关键设置与优化策略,涵盖时钟树异常引脚设置、目标参数配置、非默认布线规则(NDR)等核心技术。通过实战案例展示如何有效控制时钟偏差、优化信号完整性,并平衡功耗与面积,为芯片物理设计提供专业指导。

weixin_30872577的博客 324

AI辅助游戏开发实战:Kimi K3提升Unity开发效率与代码质量

在游戏开发领域,有限状态机(FSM)是构建角色AI行为逻辑的核心设计模式,它通过定义明确的状态和转换条件,使游戏实体能够智能地响应环境变化。其原理在于将复杂的行为分解为离散的状态节点,并通过事件驱动状态切换,从而实现清晰、可维护的AI架构。这项技术的价值在于显著提升了游戏角色的行为真实感和开发效率,被广泛应用于NPC行为控制、角色动画管理、UI流程等场景。随着AI编程助手的兴起,开发者现在可以借助如Kimi K3这类工具,通过自然语言指令快速生成和优化FSM等复杂系统的代码框架,将更多精力投入到核心玩法与性

weixin_30430677的博客 407

【Java面试题】在Java中String,Stringbuffer,StringBuilder的区别?

本篇文章主要介绍在Java中String,Stringbuffer,StringBuilder的区别以及部分理论知识 String、StringBuffer和StringBuilder都是Java中用于处理字符串的类 它们之间的主要区别如下: 1、可变性:String类是不可变的,即一旦创建了一个String对象,就不能修改它的值。而StringBuffer和StringBuilder是可变的,可以对其内容进行修改和操作。

Jin_Xiang123的博客 1383

LeRobot 入门教程(七)数据集

LeRobot Dataset v3.0 是机器人学习数据的标准化格式,支持多模态时间序列数据和视频的统一访问。该版本通过基于文件的存储(Parquet/MP4)、关联元数据和Hub原生流式处理等新特性,显著提升了性能并降低了存储开销。文档详细介绍了格式设计、安装使用、数据记录与加载方法,以及从v2.1迁移到v3.0的步骤,特别针对大型数据集(如DROID 1.0.1)的处理提供了SLURM集群移植方案。v3.0通过优化文件组织和元数据管理,实现了更快的加载速度、更高的内存效率和更好的可扩展性。

2506_90492529的博客 2051

Java 面试题:String、StringBuffer、StringBuilder 有什么区别?

几乎所有的应用开发都离不开操作字符串,理解字符串的设计和实现以及相关工具如拼接类的使用,对写出高质量代码是非常有帮助的。关于这个问题,我前面的回答是一个通常的概要性回答,至少你要知道 String 是 Immutable 的,字符串操作不当可能会产生大量临时字符串,以及线程安全方面的区别。

栗筝i的博客 5057

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

JAVA面试题:String、Stringbuffer、StringBuilder的区别

String类一旦创建了一个String对象,它的值就不能改变,对String进行操作时,都会创建一个新的String对象,此外,String是线程安全的。StringBuffer对象可变,可以对其内容进行修改而不产生新的对象,StringBuffer是线程安全的,适用于多线程的环境。StringBuilder在进行字符串拼接和修改时效率比StringBuffer更高,因为它的方法不是同步的,所以它也是线程不安全的。

weixin_58856455的博客 667

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【JAVA面试题】String、StringBuffer和StringBuilder的区别

String 类型 String str ="Hello word!!"; String类是不可变的,内部维护的char[]数组长度不可变(根据源码可知),为final修饰的,String类也是final修饰的,所以不存在扩容。在字符串拼接、截取,截取都会生成新的对象,频繁操作字符串效率低下,因为每次都会生成新的对象。 StringBuffer 类型 String str = "Hello word"; StringBuffer sf = new StringBuffer(str); St

qq_35873904的博客 274

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Java经典面试题——String、StringBuffer、StringBuilder有什么区别?

StringBuffer本质是一个线程安全的可修改字符序列,它保证了线程安全,也随之带来了额外的性能开销,所以除非有线程安全的需要,不然还是推荐使用它的后继者,也就是StringBuilder。也由于它的不可变性,类似拼接、裁剪字符串等动作,都会产生新的 String 对象。count 是一个 int 类型的变量,表示字符序列的长度。随着字符串的拼接,value 数组的长度会不断增加,因此在 StringBuilder 对象的实现中,value 数组的长度是可以动态扩展的,就像ArrayList那样。

LiLi的博客 552

Java面试题04-String、StringBuffer、StringBuilder的区别

String、StringBuilder、StringBuffer的区别

z318913的博客 345

【Java面试题】String 和 StringBuilder、StringBuffer的区别?

Java面试题:String 和 StringBuilder、StringBuffer的区别? 这个三个类的区别主要在两个方面,运算速度(执行效率或运算性能)和线程安全性。 1,运算速度比较(通常情况下):StringBulider > StringBuffer > String Stirng 是 fina 类不能被继承且为字符串常量,而StringBulider 和 StringBu...

不负年华 228

高频Java面试题深度拆解:String/StringBuilder/StringBuffer三剑客对决(万字长文预警)

String:不可变,线程安全,适合做keyStringBuilder:可变,非线程安全,性能王StringBuffer:可变,线程安全,性能代价选型口诀:单线程用构建,多线程用缓冲,不变就用字符串下次面试再被问到这个问题,请把本文内容娓娓道来,然后等着看面试官瞳孔地震吧!记得面试完回来还愿啊~(手动狗头)

laowangpython的博客 1219

【Java面试题】Java中String、StringBuffer、StringBuilder 的区别?

我们知道String是最常用的一个字符串类,但是问到String、StringBuffer、StringBuilder 三者的区别时,往往会着重区别StringBuffer与StringBuilder的区别,因为三者都是final修饰的常量类,而String字符串的定义类中。...

一宿君 828

【Java面试题】String 、StringBuilder 、StringBuffer 的区别?

String 、StringBuilder 、StringBuffer 的区别? Java 平台提供了两种类型的字符串:String 和 StringBuffer/StringBuilder,它们都可以储存和操作字符串,区别 如下。 1)String 是只读字符串,也就意味着 String 引用的字符串内容是不能被改变的。初学者可能会有这样的误解: 1. String str = “abc”; 2...

wu的BLOG的博客 653

java stringbuffer相等_分析java面试题《String、StringBuffer和StringBuilder的区别》

这几天基本上都在给大家分析一些面试题。希望通过一些比较具体化,形象化的描述来让大家能理解这些比较抽象的东西。今天就给大家分析下String、StringBuffer和StringBuilder的区别。01String对于StringBuffer和StringBuilder来说的区别先说说String和其他两个的区别吧。刷面试题的朋友肯定能说出来String声明的对象是不可变对象,其他两个类声明的对...

weixin_39976748的博客 149

Java常考面试题7 深刻认识String、StringBuilder、StringBuffer

深刻认识String、StringBuilder、StringBuffer

HZ_LIZX的博客 1647

关于Java String, StringBuilder, StringBuffer, Hashtable, HashMap的面试题

题目是一道简单的小程序,像下面这样: public class Test1 { public static void main(String args[]) { String s = new String("Hello"); System.out.println(s); foo(s); System.out.println(s); } public static

2837
上一篇: 腾讯QQ、新浪微博第三方登录接口申请说明
下一篇: 《Java并发编程实战》读书笔记
Footloose_
博客等级 码龄10年 254粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值