Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >String能变化吗?和StringBuffer的区别是什么?

String能变化吗?和StringBuffer的区别是什么?

作者头像
马克java社区
修改于 2021-03-17 02:13:21
修改于 2021-03-17 02:13:21
2600
举报
文章被收录于专栏:java大数据java大数据

【新手可忽略不影响继续学习】看 过上面例子的童鞋一定会觉得很奇怪,s = s + s1.charAt(i); 马克-to-win, s不是老在变化吗?其实s = "";时,虚拟机会创建一个String对象,s = s + s1.charAt(i); 时,会创建一个新对象,而不是之前的s了,会导致新对象的生成,这样做次数少还没有太大的问题,如果次数多的话,很浪费空间。StringBuffer是 在同一个实例上做这些事,不用生成新对象。当做的次数多的话,会节省大量空间。

更多请看:https://blog.csdn.net/qq_44639795/article/details/103124819

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
java中“类”和“对象”到底有什么联系
【新手可忽略不影响继续学习】 Class是"类"的意思,是抽象的,并没有具体的说是哪个东西。而object是具体的,实实在在存在的一个东西,一个物体。比如车就是一个类,而不是一个object,因为车这个概念是抽象的,并没有具体指明是哪辆车。而车牌号为京HT3113的这辆车就是一个object,因为它实实在在的存在。而另外一辆车牌号为京jw2344车是另外一个实实在在的object,这两个object属于一类叫"车"。车这一类有别于另外一类:窗体window。window是类而不是object,原因是你并没有实实在在,具体的指明,@马克-to-win是哪一个window,而我电脑上,暴风的window或迅雷的window就是两个具体的实实在在的object。
马克java社区
2021/03/12
2710
java中“类”和“对象”到底有什么联系
java中的访问控制有什么用?如何用法?请举例
【新手可忽略不影响继续学习】 访问控制有什么用?在软件公司里是这么用的,我们想像一种场景,在你的类中,你编了三个私有方法,马克-to-win,别人当然都用不了,但在类外,你也是用不了的,你必须,在类里再编一个公共方法,别人就能随便用了!但是如果你的公共方法调用那三个私有方法的顺序是132的话,全世界人民只能调用那个公共方法,按照132的顺序,来使用那三个私有方法,他想按照123的顺序来调用那三个私有方法,都没办法。因为这个类的发布权在你手里,全世界人民只会到你的网站去下载。如果大家有需求建议说你把顺序改成321,他们得经过你的同意,把这顺序为321的公共方法,重新加入你的类中,重新在你自己的网站打包发布,所以保护了你的知识产权马克-to-win。
马克java社区
2021/03/16
4160
java中的访问控制有什么用?如何用法?请举例
java网络编程中Socket什么意思?怎么工作的?
马克-to-win:同学,请看看你自己的电视和什么连在一起。是木桌子吗?还是窗帘?对,是接线板。网络的发明者们就是受到了我刚才提到的那个大家熟视无睹的现象的启发而采取了Socket(接线板)机制。但不幸的是,我们的最早的翻译家们不知什么原因,翻译成了套接字?谁能告诉我中文里套接字是什么意思?接线板(Socket)机制很形象。服务器和客户端都生成一个Socket的类对象,俩对象就可以发送数据了。当然,机器之间的物理硬件以及电缆连接等细节都封装在类中了。我们就没必要关心了。下一步,从Socket接线板中得到一个InputStream或OutputStream,这样,我们就可以将网络连接作为一对IO流对象来处理了。
马克java社区
2021/05/10
4200
java网络编程中Socket什么意思?怎么工作的?
java继承当中都有一些什么样的构造函数规则?
马克-to-win:继承当中的构造函数规则貌似复杂: 记住我给你的以下几条口诀, 你高枕无忧。1)如果你在某类中写了带参构造函数,系统就不会再为你在那类中自动添加无参构造函数了。2)如你没有写无参构造函数,且机器也不会为你自动添加这个无参构造函 数时(因为你已经有带参构造函数了),你不可以主动调无参构造函数。3)子类的构造函数中不能人为的写两个super。4)构造函数中要是你人工想写super,super必须为第一句话。构造函数中要是你不写super,机器会为你加无参数super().马克-to-win:5)既然super必须为第一句话,创建子类对象时,构造函数调用次序为,先最低的超类直到最高的子类。
马克java社区
2021/03/26
3050
java继承当中都有一些什么样的构造函数规则?
java中hashCode和equals什么关系,hashCode到底怎么用的
马 克-to-win:hashCode方法主要是Sun编写的一些数据结构比如Hashtable的hash算法中用到。因为hash很快,所以你往 Hashtable里放东西的时候,他先比一下,里面有没有现有的东西的hashCode和你一样,如果都不一样,证明是新的,就不再运行equals方 法了,直接放进Hashtable里了,很快。如果放的时候,Hashtable里面现有的某东西的hashCode和他一样,他再运行一下 equals,如不一样,则证明是新的,可以放入。equals也一样,证明确实是一样的,不让放入Hashtable。另外,Object的hashCode方法(Sun公司编的)是返回对象的内部地址。equals原始方法判断两个Object是否a==b,内存地址是否等(以下摘自sun的文档:As much as is reasonably practical, the hashCode method defined by class Object does return distinct integers for distinct objects. (This is typically implemented by converting the internal address of the object into an integer, but this implementation technique is not required by the JavaTM programming language.)
马克java社区
2021/03/29
3450
java中hashCode和equals什么关系,hashCode到底怎么用的
java中this这个概念初学者非常难理解,请举例说明
MyTestDate(int year, int month, int day) {
马克java社区
2021/03/15
2630
java中this这个概念初学者非常难理解,请举例说明
new String比字符串池浪费空间,为什么要用它?
对于下面程序中:ss0 = new String( "hello" );是用new()来新建对象的,存于堆中。每调用一次就会创建一个新的对象。当然从节省空间的角度来讲,肯定不如str="hello",有童鞋一定问,那要它有什么用?当时设计编译器时,为什么要设计它?马克-to-win,那我请问你,如果在你编程序时,你还不知道字符串内容怎么办?这时就用到new String(String original),所以,什么都有什么的用处。
马克java社区
2021/03/22
4690
new String比字符串池浪费空间,为什么要用它?
Override,Overload,Overwrite到底有什么区别?
Override,Overload,Overwrite的区别【新手可忽略不影响继续学习】
马克java社区
2021/03/25
6000
Override,Overload,Overwrite到底有什么区别?
java中StringBuffer的用法
StringBuffer:String类同等的类,它允许字符串改变(原因见上一段所说)。Overall, this avoids creating many temporary (临时)strings, in other words, without StringBuffer, you must create many temporary strings.  StringBuffer的内部实现原理:马克-to-win,Every string buffer(缓存) has a capacity(容量). As long as the length of the character sequence contained in the string buffer does not exceed(超过) the capacity, it is not necessary to allocate(分配) a new internal buffer array. If the internal buffer overflows(满后溢出), it is automatically made larger.附带一句:从JDK5开始引入StringBuilder类,它是简易的StringBuffer,速度更快,但线程不安全
马克java社区
2021/03/22
5380
java中StringBuffer的用法
java对象有什么重要的?
【新手可忽略不影响继续学习】早期的编程主要是面向过程的编程,处理的问题都相对的简单,比较过程化,换句话说,就是一步一步从开始到结束,比如第一步进入电梯,第二步关门,第三步按15层,第四步走到自家门口。。。。program有个意思是节目单,你觉得上述过程像个节目单一样吗?所以我们管它叫面向过程的program。时代在发展,我们需要编写的系统越来越复杂和庞大。过去排个序,a,b,c变量名就够了,后来出现了一大堆相关的变量,比如窗口的高和宽。这时c中出现了类似结构体Window和结构体变量win1这种东西。Window这个结构体里有高和宽,这两个属性。后来发现还是不好,需要加方法,所以就有了类和对象。@马克-to-win。
马克java社区
2021/03/11
4740
java对象有什么重要的?
java中程序,进程和线程的区别
马克-to-win:程序,进程和线程的区别是什么?这个问题比较抽象难理解,但又非常重要。我并不想给出一大堆抽象的学术解释,那样只能误国误民。所以我先给大家举一个例子。马克-to-win: 2000年的时候,我比较爱用ie的老版本。当时我喜欢边上网边下载很多东西,比如很多MP3同时下。我发觉如果我打开一个ie,之后用file/new,new出很多窗口来,边看网页,边下载很多mp3的话,如果有一个下载崩溃的话,所有的ie窗口就同时都崩溃了,包括网页和所有的下载窗口。马克-to-win:后来我就学聪明了,我打开两个ie。一个ie用来浏览网页。另一个ie,file/new出很多新的窗口。这样如果下载出问题了,下载的ie会崩溃。但浏览网页的ie依旧完好的工作。在上述例子当中,ie就是一个应用程序,后来我打开两个ie,就是打开两个进程。这两个进程,在内存中分别占有不同的代码空间。马克-to-win:所以一个进程崩溃不影响另外一个。后来从其中一个ie, file/new出很多个新窗口。每一个窗口就是一个线程,线程在内存当中是没有自己的代码空间的。它只能依附于进程存在。马克-to-win:所以,这个进程当中的一个线程窗口崩溃了,所有依附于这个进程的线程窗口就都崩溃了。相对于进程来讲,线程非常轻量,非常节省资源。我经常同时打开二十个窗口,下载各种音乐mp3。反正是线程,不占资源。马克-to-win:线程在内存当中没有自己的代码空间。只有程序计数器。一个线程可能执行到所依附进程的1000行,另一个线程,可能执行到第99行,这两个线程,虽然依附于同一个主进程,但他们各自执行各自的,相互不影响。马克-to-win:仔细揣摩我上面说的故事,你就会理解,程序,进程和线程的区别。给点抽象的话:程序是硬盘上的一个文件,是一个机器代码和它的数据的集合。进程是程序在内存上的一次运行活动,占代码空间。线程是依附于进程,靠程序计数器能独立运行,轻量独立运行单元。
马克java社区
2021/04/08
3560
java中程序,进程和线程的区别
java栈stack和堆heap的工作原理,用途及区别?举例说明
函数中的一些基本类型的变量(int, float)和对象的引用变量(reference)都在函数的栈中,马克-to-win,(工作于编译阶段, 生成class文件之前)分配。存取速度快,稍逊于寄存器, 比堆快,
马克java社区
2021/03/17
6340
java栈stack和堆heap的工作原理,用途及区别?举例说明
java中到底什么是抽象?
抽象Abstract:【新手可忽略不影响继续学习】    很多java 的书中都谈到了抽象abstract的概念,到底什么是抽象?马克-to-win:抽取关键相关特性(属性和方法)构成对象,用程序的方法逻辑和数据结构 属性模拟现实的世界对象。比如上节的例子,现实世界的计算机里的window很复杂,那么多像素,那么多颜色,那我们如何萃取出和我们相关的属性和方法完 成我们的客户的需求呢?这个过程就叫抽象。上例中我们只抽象出了title属性和close方法就可以满足用户需求。
马克java社区
2021/03/12
4500
java中到底什么是抽象?
java中public和缺省这两个访问权限的根本区别?
为了区分开public和缺省的区别,我们要引进包(package)的概念。包就像咱们磁盘上的目录一样,马克-to-win。package a;就是定义说当前的目录为a。底下编的任何的类,都会出现在当前的这个目录a里。import b;就是导入b目录当中的类资源,因为我们在运行当前目录当中的类时,需要b目录当中的类资源。导入之后,b目录当中的类随便用。
马克java社区
2021/03/16
5120
java中public和缺省这两个访问权限的根本区别?
java中请给出一个return this的例子
【新手可忽略不影响继续学习】下面例子中setYear中的return this;返回了一个指向对象的指针,this.setMonth(8).setDay(20);是合法的,如果像原来的例子一样什么都不返回,就成了void.setMonth(8).setDay(20); 马克-to-win,系统就该报错了
马克java社区
2021/03/15
3740
java中请给出一个return this的例子
多态polymorphism,向上转型和动态方法调度有什么用
多态有什么用?马 克  -   t   o - w   i  n:https://blog.csdn.net/qq_44639795/article/details/103117332我给大家想了两个需求: 1)要求程序运行起来以后,如果用户输入自行车,就执行自行车的驾驶方法。如果用户输入小轿车,就执行小轿车的驾驶方法。这是就用到父类指针指向子类时的override。2)如果你有一千个子类。要求你依次执行这一千个子类当中的打印。你当然可以一个一个实例化子类后分别执行。马克-to-win:累也累死了,你可以编一个循环。用通用的基类指向所有的派生类。几行程序即可,你可以参照本节的例子。不用这技术, 还真解决不了这问题!
马克java社区
2021/03/29
4260
多态polymorphism,向上转型和动态方法调度有什么用
java的内存泄露是如何发生的,如何避免和发现?
马克-to-win:上一节讲了,(i)对象被置成null.(ii)局部对象(无需置成null)当程序运行到右大括号.(iii)匿名对象刚用完,垃圾回收线程就早早晚晚都能把它过去占的内存给回收了。这么说,java中难道就没有c++的内存泄露的问题了吗?(内存泄露的定义就是: 咱自己程序不用的内存,系统本应回收但由于各种原因却没有回收成功)马克-to-win:答案: 错,java中有内存泄露。下面我们就通过一个例子来说明。下面的例子中,Mark_to_win m作为实例是占有内存空间的。即使后来m = null;把它置为null,垃圾回收线程也回收不了它占有的空间。因为等我们后面集合框架学习了Vector以后,你就会知道:Vector v是一个类似数组的东西。马克-to-win: 任何通过v.add(m);加到Vector里的东西,Vector都会保留一个对它的引用。正因为有这个引用,垃圾回收系统当中的有向图会认为,这个对象还是可达的,所以不会回收它的内存空间。因为size_Make_to_win非常大,(是maxMemory的0.8倍),所以系统最后就崩溃了。马克-to-win: 用专业术语讲,就是开始时是内存泄漏,泄露多了就造成内存溢出了,所以就曝出OutOfMemoryError的错误了。
马克java社区
2021/03/29
7790
java的内存泄露是如何发生的,如何避免和发现?
java中抛出throw关键字是怎么用的? 举例?
马克-to-win:我们先说5/0的原理,当程序运行到5/0的时候,java系统JVM会在后台new出一个除0异常实例,之后把这个实例传入catch块儿供开发者使用。马克-to-win:而这里throw new Exception();是开发者自己主动new出一个异常实例,之后把这个实例传入catch块儿供开发者自己使用。马克-to-win:对于catch来讲,不管谁抛的,处理起来都一样。
马克java社区
2021/04/07
7500
java中抛出throw关键字是怎么用的? 举例?
java中String类的用法
String不像int或float, 它是参考类型。final类型, 不能被继承,String is a Reference Type,Defined in java.lang package
马克java社区
2021/03/17
5300
java中String类的用法
java中线程同步Synchronized,监视器monitor和锁lock的关系是什么
既然有关监视器monitor的概念比较难,大家怎么解释的都有。首先我给出一下java的官方文档,也是最权威的解释:
马克java社区
2021/04/23
7950
java中线程同步Synchronized,监视器monitor和锁lock的关系是什么
推荐阅读
相关推荐
java中“类”和“对象”到底有什么联系
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档