java Int 转 String 后占用内存会变大吗?

1,420 阅读1分钟

java Int 转 String 后占用内存会变大吗?

一、什么是byte

byte,即字节。

  • byte作为java的基本类型之一。
  • java中它的范围在-128~127,默认值为0。
  • byte 数据类型是8位,1个字节=8bit,bit是传递信息的最小单位。
  • byte 类型用在大型数组中节约空间,主要代替整数,因为 byte 变量占用的空间只有 int 类型的四分之一

二、内存分析

1. 字符分析

image.png

String 在ASCII编码中英文字符1个字节 中文2个字节 (String的中文字节数要看用的编码集合,如果是utf-8类型的,一般中文占3个字节,如果是GBK或GB2312编码的,那么中文占2个字节)

2. java中占用内存分析

感谢掘金 @文亮同学 的指正。

int 是基本类型,而String不是,查看String的结构,发现还有以下属性。

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
  
    private final int count;
   
    private int hash; // Default to 0

    /** use serialVersionUID from JDK 1.0.2 for interoperability */
    private static final long serialVersionUID = -6849794470754667710L;
   
   ....
   
}

所以如果从java中的内存中来看,Stirng 肯定要比int的内存要大。

三、结论

分两种情况

  1. 如果是转字节流(byte),比如TCP传输数据

由于int占四个字节,int 转string后就变成字符,英文字符或数字占一个字节,所以,当小于4位数字的int时,String反而占用的内存少,大于4位数的int时,String占用的内存就比int大。

  1. 如果是在java中的内存

String > int