「java定义字符串内存」java string内存

博主:adminadmin 2022-11-24 07:22:07 72

本篇文章给大家谈谈java定义字符串内存,以及java string内存对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

在JAVA中当定义char c='a',String s="abc"时,分别在内存中占多少字节?

Java中无论是汉字还是英文字母都是用Unicode编码来表示的,一个Unicode码是16位,每字节是8位,所以一个Unicode码占两字节。但是英文字母比较特殊,源自于8位(1字节)的ASCII吗,于是在Unicode码仅使用了低8位(1字节)就可以表示,高8位的话不使用也无所谓。所以

char

c='a';

System.out.println(c.getBytes().lenth()),得到的是1(字节)

但汉字就完整地使用了16位(2字节)的Unicode,所以

char

c='中';

System.out.println(c.getBytes().lenth()),得到的是2(字节)

综上,c='a'在内存中确实只占1字节,但这不意味着String

s="abc"在内存中只占3字节。应该这么说,String

s="abc"至少在内存中占3字节。这是因为char是基本数据类型,而String确是对象类型。对象是一种很复杂的数据类型,你要看一个对象具体占多少字节,可以把这个对象序列化后存入一个文本文件来看它具体占用了多少字节,当然这也不是精确的,因为序列化需要写入少量系统信息,但大致是对的。

java怎么设置每个字符串所占的空间

String这个类定义出来的字符串中,每个字符都是由2个字节的unicode-16编码编译的(能够表示从范围\u0000到\uffff个字符),所以是固定的,如果要修改其占用空间的话,只能自己定义自己的字符串类(无法从String继承哦,得从Object继承写起),但是如果是要写到文件中的话,使用getBytes(System.getProperty("file.encoding"))这个方法得到的byte[]数组就是当前操作系统平台下的默认编码的最简字节,占用空间可用length计算。

java 如何定义字符串变量

一、定义字符串

直接定义字符串是指使用双引号表示字符串中的内容,例如"Hello Java"、"Java 编程"等。具体方

法是用字符串常量直接初始化一个 String 对象,示例如下:

String str="Hello Java";     String str;     str="Heilo Java";

二、用 String 类定义

1. String() 初始化一个新创建的 String 对象,表示一个空字符序列。

2. String(String original)

初始化一个新创建的 String 对象,使其表示一个与参数相同的字符序列。换句话说,新创建的字符串是该参数字符串的副本。

例如:

String str1=new String("Hello Java");

String str2=new String(str1);

3、String(char[ ]value)

分配一个新的字符串,将参数中的字符数组元素全部变为字符串。该字符数组的内容已被复制,后

续对字符数组的修改不会影响新创建的字符串。

例如:

char a[]={'H','e','l','l','0'};

String sChar=new String(a);a[1]='s';

4、String(char[] value,int offset,int count)

分配一个新的 String,它包含来自该字符数组参数一个子数组的字符。offset 参数是子数组第一个字符的索引,count 参数指定子数组的长度。

该子数组的内容已被赋值,后续对字符数组的修改不会影响新创建的字符串。

例如:

char a[]={'H','e','l','l','o'};

String sChar=new String(a,1,4);

a[1]='s';

扩展资料:

编程工具:

Eclipse:一个开放源代码的、基于Java的可扩展开发平台 。

NetBeans:开放源码的Java集成开发环境,适用于各种客户机和Web应用。

IntelliJ IDEA:在代码自动提示、代码分析等方面的具有很好的功能。

MyEclipse:由Genuitec公司开发的一款商业化软件,是应用比较广泛的Java应用程序集成开发环境   。

EditPlus:如果正确配置Java的编译器“Javac”以及解释器“Java”后,可直接使用EditPlus编译执行Java程序   。

参考资料:百度百科-java

Java中 String字符串内存分配问题

jvm中有个String pool,一般在池中有的对象就不会再去生成一个新的。

String s1 = "abc";

生成了一个字符串对象"abc"并放入pool中,定义了一个String变量s1并指向"abc"。

String s = "abc" + s1 + "def";

等式右边有三个String 对象 "abc" 、s1 、"def"

这里("abc"==s1)是true,就是说是引用的同一个内存地址。

"abc"已经在池中了,直接从池中取出来,这句又创建了一个"def"的String对象并放入池中。

当前二个String对象做连接的时候,又会创建一个新的String对象"abcabc",并放入池中;然后再做字符串相加"abcabc"+def又生成一个字串对象,最后变量s指向这个新的String对象。

所以用+来连接字串会产生很多临时的字串对象,效率低。一般使用StringBuffer或StringBuilder来做字串连接。

可以使用new String()来生成一个新的String对象并单独分配内存空间。

------------------------------------------------------

查了下资料,已经改了回答内容。

String s = "abc";

这句是定义一个String变量s,jvm会先去字符串池中找有没有"abc",有的话就把s指向"abc",没有就会先在池中创建一个,再让s指向"abc"。

String s = new String("abc");

这句是先定义一个String变量s,然后在内存中分配新的空间"abc"再让s指向这个内存地址。

java定义字符串内存的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java string内存、java定义字符串内存的信息别忘了在本站进行查找喔。

The End

发布于:2022-11-24,除非注明,否则均为首码项目网原创文章,转载请注明出处。