Java 基本数据类型、装箱拆箱、四个内存区域、String类

xiaoxiao2021-02-28  46

Java 数据类型

· 基本数据类型:byte、short、int 、long、float、double、char、boolean

· 引用类型:类,String(也一种类)

Java设计中,一直提倡一个原则:一切皆对象,而基本数据类型不是对象

为了改变这种状况可以将基本对象作为类的属性包装起来。这种操作被称为 装箱

Java提供了8个包装类:

    数值(Number子类)类:Byte(byte)、Short(short)、Integer(int)、Long(long)、Float(float)、Double(double);

    对象(Object子类)类:Boolean(boolean)、Character(char);

将包装类变成基本数据类型 拆箱 :[基本数据类型]Value()   例:intValue()、floatValue()

Integer var = new Integer(10);    //装箱 int result = var.intValue();      //拆箱

JDK1.5 以后,Java提供了自动装箱、拆箱操作

Integer var = 10;        //自动装箱 System.out.println(var); //自动拆箱

因为有了自动装箱、自动拆箱操作,Object才可以接收基本数据类型的数据。

对于包装类,由于自动装箱拆箱,也和String类一样,存在两种实例化操作:

        一种直接赋值,一种通过构造方法赋值;而通过直接赋值方法实例化的包装类对象可以自动入池。

Integer x = new Integer(10);        //开辟新空间 Integer y = 10;                     //入池 Integer z = 10; System.out.println(x == y);    //false    “==”操作会判定地址操作 System.out.println(x == z);    //false System.out.println(y == z);    //true System.out.println(x.equals(y));//true

使用包装类将字符串转变成指定数据类型:

        Integer.parseInt(str)    Double.parseDouble(str)    Boolean.parseBoolean(str)    .......

        (转成Boolean时,如果字符串中的内容不是"true"或"false",统一按照false处理)

Java主要的四个内存区域

栈内存空间:保存所有对象的名称(保存了引用的堆内存的地址)

堆内存空间:保存对象的具体内容(栈地址指向的内容)

全局数据区:保存static类型的属性

全局代码区:保存所有的方法定义

String类

String创建字符串后,字符串不可改变,连接/改变 字符串会重新创建一个新的字符串再赋值

字符串直接赋值会放入对象池,String类设计时采用共享设计模式概念,在每一个运行中的JVM底层都存在一个字符串的对象池(Object Pool),以供其他继续使用直接赋值方式的String对象使用。

String str = new String("Hello");   构造方法赋值,首先会创建一个字符串"Hello"堆内存空间,new再开辟一个堆内存空间,最后使用的是new关键字开辟的堆内存,而之前定义的字符串常量的堆内存空间将不会有任何栈内存指向,成为垃圾等待GC回收。 

boolean    str1.equals(str2) ;表示判断str1和str2内容是否相等(不判断地址),"=="判断内容和地址是否相同

boolean    str1.equalsIgnoreCase(str2);不区分大小写的比较

int    str1.compareTo(str2);计算方式str1-str2,按每个字符

void    str1.intern();表示字符串手动入池(对象池)

char    str1.charAt(int index);取出字符串索引为index的字符

String    new String(char[] value, int offset, int count);new String (char[] value);字符数组转字符串 (构造方法)

char[]    str1.toCharArray();将字符串转变成字符数组

String    new String(byte[] bytes, int offset, int count);new String (byte[] bytes);字节数组转字符串 (构造方法)

byte[]    str1.getBytes();将字符串转变成字节数组

转载请注明原文地址: https://www.6miu.com/read-2628312.html

最新回复(0)