‘壹’ String类型所接收的字符串在哪进行存储
String类型表示字符串可以分为两种方式:
直接使用字符串变量接收一个字符串常量;这个字符串常量是在常量池中存储的;
使用new关键字创建字符串对象,则在堆中存储。
‘贰’ C++中string类型变量存储字符串的方法
一般的实现是类似于这个样子.
char*
ptr;
//
内存指针,
用来保存字符串
size_t
cap;
//
动态内存的长度
size_t
len;
//
字符串的长度
实际的实现会更加复杂,
而且是模板.
赋值的时候
先检查
ptr是不是
null,
如果是的话分配足够的动态内存.
如果ptr不是null,
那么检查cap是否足够放下字符串,
如果不足的话重新分配内存.
然后调用std::或者strcpy之类的函数,
把字符串复制到ptr中.
(1)它是通过动态分配内存给_Ptr来存储字符串,还是通过其他的什么方式来存储字符串的?
动态内存.
‘叁’ java中一个String常量和一个new 出来的String对象追加的时候,在内存中是怎么存储的
String a = "women"; "women"表示String类的对象,是堆内存里的,把"women"地址值赋给了a
String b = "wo"+"men"; java 程序中有常量优化机制,最后"women"地址值给了b;
String c = "wo"+new String ("men");表示两个地址值不一样的对象相加,其实底层是用StringBuffer的append()方法操作的;会创建新的对象;以前的变成了垃圾,结果为“women”;
‘肆’ 字符串在内存中怎么储存
字符串是以ASCII字符NUL结尾的字符序列。
ASCII字符NUL表示为\0.字符串通常存储在数组或者从堆上分配的内存中。只是,并不是全部的字符数组都是字符串,字符数组可能没有NUL字符。
字符数组也用来表示布尔值等小的整数单元,以节省内存空间。
C中有两种类型的字符串:
单字节字符串
由char数据类型组成的序列
宽字符串
由wchar_t数据类型组成的序列
wchar_t数据类型用来表示宽字符,要么是16位宽。要么是32位宽。这两种字符串都以NUL结尾。能够在string.h中找到单字节字符串函数。而在wchar.h中找到宽字符串函数。宽字符主要用于非拉丁字符集,对于支持外语的应用程序非常实用,
字符串的长度是字符串中除了NUL字符外的字符数。为字符串分配内存的时候,要记住为全部的字符加上NUL字符分配足够的空间。
‘伍’ String类型表示的字符串在哪存储
String name = "手机";
则"手机"这个字符串在常量池里
name这个变量在栈里
‘陆’ java中的String常量是存放在栈中还是堆中
string 字符串是经过final修饰的,在源码中就可以看到,所以string str= “123”声明的变量str是在栈区存放的,但声明变量的值‘123’是在常量池中存放的,如果是经过 new
String str = new String(123);这样的,变量名str是在堆区存放的,但‘123’还是在常量池中存在,在常量池中存放时会先看常量池中有没有这个‘123’值,有的话就把这个值的地址值赋给堆区中的str,没有就新建一个;