首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

string无法取代char*

涉及字符串,C开发人员使用char*,大部分C++开发人员会优先使用string,其实string也不是万能。接下来,我将介绍string无法取代char*的三个场景。...string依赖运行时库,不适合在不同运行时库间使用 string属于C++标准库,Windows是将其实现在C++运行时库内,不同的Visual Studio版本使用的运行时库是不同,string在不同的运行时库内实现也有所差异...string封装了内存的分配,不适合对内存管理需要完全控制的场景 string封装了内存的分配与释放,开发人员不需要担心内存问题。但是,string是在堆上分配内存,会产生内存分片。...对string进行更改操作(如插入、替换)导致string的长度变长,string内部的内存都会重新分配,对性能也存在影响。...,就无法调用。

84930

Java String 理解

我们经常会面对一个问题,String 是最基本的数据类型吗? String 是值类型还是引用类型? 首先我们来回答第一个问题 String 是最基本的数据类型吗? 不是。...String 是值类型还是引用类型? 除基本的数据类型外,都是引用类型,所以String是引用类型,但是在python中string是值类型。 但是这里还有一个概念是值传递和引用传递?...String a = "chenssy"; String b = "chenssy"; String c = new String("chenssy"); a、b和字面上的chenssy都是指向JVM字符串常量池中的...String() 创建新的字符串对象 String(char[] value) 把字符数组转化为字符串 String(byte[] bytes, int offset, int length) String...(String anotherString) 此 String 对象在参数字符串之前,返回一个负整数 String concat(String str) 将指定字符串联到此字符串的结尾。

47960

深入理解String

如果要深入理解一个类,最好的方法就是看看源码: public final class String implements java.io.Serializable, Comparable...String类的值是通过char数组存储的,并且char数组被private和final修饰,字符串一旦创建就不能再修改。 下面通过几个问题不断加深对String类的理解。...String被许多的Java类(库)用来当做参数,比如网络连接地址URL,文件路径path,还有反射机制所需要的String参数等,假若String不是固定不变的,将会引起各种安全隐患。...我们可以写个简单的例子证明: public static void main(String[] args) throws Exception { String s1 = "abc"; String...还有一个面试中经常问的,new String(“abc”)创建了几个对象? 这可能就是想考你对字符串常量池的理解,我一般回答是一个或者两个对象。

33220

深入理解Java:String

说到这里,对常量池中的字符串值的存储位置应该有一个比较明了的理解了。在程序执行的时候,常量池会储存在Method Area,而不是堆中。...下面是一些String相关的常见问题:   String中的final用法和理解   final StringBuffer a = new StringBuffer("111");   final...根据常量区中的字符串生成常量池,每个字符序列如"123"会生成一个实例放在常量池里,这个实例是不在堆里的,也不会被GC,这个实例的value属性从源码的构造函数看应该是用new创建数组置入123的,所以按我的理解此时...最后我再破除一个错误的理解:有人说,“使用 String.intern() 方法则可以将一个 String 类的保存到一个全局 String 表中 ,如果具有相同值的 Unicode 字符串已经在这个表中...,那么该方法返回表中已有字符串的地址,如果在表中没有相同值的字符串,则将自己的地址注册到表中”如果我把他说的这个全局的 String理解为常量池的话,他的最后一句话,”如果在表中没有相同值的字符串,

33510

深入理解string和如何高效地使用string

但是string的常用性并不意味着它的简单性,而且我认为,正是由于string的频繁使用才会促使其设计人员在string的设计上花大量的功夫。...string interning的基本前提是string的恒定性(immutability),即string一旦被创建将不会改变。我们就先来谈谈string的恒定性。...所有对这个string进行各项操作(比如调用ToUpper获得大写格式的string)而返回的string,实际上另一个重新创建的string,其本身并不会产生任何变化。...CLR通过一个内部的interning table保证了CLR只维护具有不同字符序列的string,任何具有相同字符序列的string所引用的均为同一个string对象,同一段为该string配分的内存快...StringBuilder之所以能对string操作带来更好的performance,是因为在它的内部维护一个字符数组,而不是一个string来避免string操作带来的新的string的创建。

695110

深入理解String,StringBuilder,StringBuffer

String 类 我们首先来看String类的实现源码: public final class String implements java.io.Serializable, Comparable...如何理解String、StringBuffer、StringBuilder之间的区别与联系 1....比如: String s1= "a"; String s2 = new String("b") ; String s3 = s1+s2; 如果这样,我们得到“ab”这个字符串,因为String底层未不可变的字符串...,所以会创建三个对象,都会占用内存,而这三个对象一直都未失去引用,所以jvm无法垃圾回收,造成内存资源的大量浪费,这在我们开发中是不推崇的,而StringBuilder 与StringBuffer则不存在这样的问题...因此,这个问题如果换成 String str = new String("abc")涉及到几个String对象?合理的解释是2个。

49420

深入理解Java中的String

由于String字符串的不可变性我们可以十分肯定常量池中一定不存在两个相同的字符串(这点对理解上面至关重要)。 Java中的常量池,实际上分为两种形态:静态常量池和运行时常量池。...总结:虽然a、b、c、chenssy是不同的对象,但是从String的内部结构我们是可以理解上面的。...s0还是常量池中"helloworld”的引用,s1因为无法在编译期确定,所以是运行时创建的新对象"helloworld”的引用,s2因为有后半部分new String(”world”)所以也无法在编译期确定...分析:JVM对于字符串引用,由于在字符串的"+"连接中,有字符串引用存在,而引用的值在程序编译期是无法确定的,即"a" + s1无法被编译器优化,只有在程序运行期来动态分配并将连接后的新地址赋给s2。...(2)是否多线程安全:String中的对象是不可变的,也就可以理解为常量,显然线程安全。

61230

深入理解Java常用类----String

Java中字符串的操作可谓是最常见的操作了,String这个类它封装了有关字符串操作的大部分方法,从构建一个字符串对象到对字符串的各种操作都封装在该类中,本篇我们通过阅读String类的源码来深入理解下这些字符串操作背后的原理...先看第一种构造器: private final char value[]; public String() { this.value = "".value; } String源码中第一个私有域就是...这也很好的解释了String对象的一个特性:不可变性。一经赋值则不能改变。而我们第一种构造器就很简单,该构造器会将当前的string对象赋值为空(非null)。...//1 public String(String original) { this.value = original.value; this.hash = original.hash...以上为String类中大部分构造器的源代码,有些源码和底层操作系统等方面知识相关联,理解不深,见谅。下面我们看看有关String类的其他一些有关操作。

81090

深入浅出理解java String

前言在 Java 编程中,String 类是一个非常重要且常用的类。它代表字符串,是不可变的,也就是说一旦创建了 String 对象,它的值就无法被改变。...本文将深入浅出地介绍 Java String 类的特性、常见操作以及一些使用技巧。...String 类的特性String 类是 Java 中的一个内置类,它具有以下特性:不可变性:一旦创建了 String 对象,它的值就无法被改变。...常见操作创建字符串对象String str1 = "Hello"; // 直接赋值String str2 = new String("World"); // 使用构造方法字符串连接String result...总结Java 中的 String 类是一个不可或缺的核心类,它具有独特的特性和丰富的操作方法。我们需要深入理解 String 类的不可变性、字符串连接和常量池等特点,并结合实际应用场景来灵活运用。

10100

Java | 深入理解String、StringBuilder 和 StringBuffer

字符串是恒定的,一旦创建出来就不会被修改,怎么理解这句话?我们可以看下 String 源码的声明 ? 告诉我你看到了什么?...所以请你告诉我下面 String s1 = "aaa"; String s2 = "bbb" + "ccc"; String s3 = s1 + "bbb"; String s4 = new String...3 理解 String、StringBuilder、StringBuffer 我们上面说到,使用 + 连接符时,JVM 会隐式创建 StringBuilder 对象,这种方式在大部分情况下并不会造成效率的损失...从设计角度理解 我们前面说过,String 类是典型的 Immutable 不可变类实现,保证了线程安全性,所有对 String 字符串的修改都会构造出一个新的 String 对象,由于 String...a = new String("ab"); String b = new String("ab"); String c = "ab"; String d = "a"; String e

1.9K31
领券