关于java基础类型与引用类型内存存储问题,以及string.intern()方法(String两种创建方式的区别)
2016-09-09 15:06
1111 查看
今天主要讲一下String的两种赋值方式在内存中的区别以及intern方法
String的两种赋值方式如下
1、String a=“abc”; 2、String a=new String("abc");
--------------------------------------------------------------------------------------------------------------------
讲主题之前我们先简单回顾基本类型和引用类型在内存存储方面的区别:
基本类型包括byte,shot,int,long,float,double,boolean,char这8类在内存的情况都是一样的、
如下的基本类型在内存存储情况是这样的
a=1首先现在栈中寻找有没有1的值,没有就在栈中创建一个,然后将a引用到1中,如果已经有1值就不需要再创建,直接将a指向面值为1的地址。举一反三,基本类型的内存存储情况都是这样的。
所以基本类型的比较值,可以用 == 也可以用equal方法(这方法无论是基本类型还是引用类型都可以)
==是比较地址 equal是比较内容
引用类型的内存存储大致情况
String a=new String("abc");
String b=new String("abc");
所有的引用类型都是这样,引用变量在栈中创建,实例在堆中创建,然后a指向实例
-------------------------------------------------------------------------------------------------------------------
好开始讲正事
开头讲的String是引用类型,它的两种赋值形式。
第一张种String a="abc";
常量池(constant pool)指的是在编译期被确定。在常量池寻找有没有abc的值,没有就创建一个abc的值,这点有点像基础类型的内存存储。使用这样的赋值方式,==也是可以比较的
而第二种new方式就像引用类型的方式
大家可以去试试,输出的是false,true
然后我们说说String.intren()
一个String实例str调用intern()方法时,Java查找常量池中是否有相同Unicode的字符串常量,如果有,则返回其的引用, 如果没有,则在常量池中增加一个Unicode等于str的字符串并返回它的引用;
以下是关于String.intern()方法,我认为网上资料讲的比较清楚的关于String.intern()方法
String的两种赋值方式如下
1、String a=“abc”; 2、String a=new String("abc");
--------------------------------------------------------------------------------------------------------------------
讲主题之前我们先简单回顾基本类型和引用类型在内存存储方面的区别:
基本类型包括byte,shot,int,long,float,double,boolean,char这8类在内存的情况都是一样的、
int a=1;
int c=2; double b=1.00;
如下的基本类型在内存存储情况是这样的
a=1首先现在栈中寻找有没有1的值,没有就在栈中创建一个,然后将a引用到1中,如果已经有1值就不需要再创建,直接将a指向面值为1的地址。举一反三,基本类型的内存存储情况都是这样的。
所以基本类型的比较值,可以用 == 也可以用equal方法(这方法无论是基本类型还是引用类型都可以)
==是比较地址 equal是比较内容
引用类型的内存存储大致情况
String a=new String("abc");
String b=new String("abc");
所有的引用类型都是这样,引用变量在栈中创建,实例在堆中创建,然后a指向实例
-------------------------------------------------------------------------------------------------------------------
好开始讲正事
开头讲的String是引用类型,它的两种赋值形式。
第一张种String a="abc";
常量池(constant pool)指的是在编译期被确定。在常量池寻找有没有abc的值,没有就创建一个abc的值,这点有点像基础类型的内存存储。使用这样的赋值方式,==也是可以比较的
而第二种new方式就像引用类型的方式
String a="c"; String a1="c"; String d = new String( "c" ) ; String d1 = new String( "c" ) ; System.out.println( d==d1); System.out.println( a==a1);
大家可以去试试,输出的是false,true
然后我们说说String.intren()
一个String实例str调用intern()方法时,Java查找常量池中是否有相同Unicode的字符串常量,如果有,则返回其的引用, 如果没有,则在常量池中增加一个Unicode等于str的字符串并返回它的引用;
以下是关于String.intern()方法,我认为网上资料讲的比较清楚的关于String.intern()方法
相关文章推荐
- java中创建String类型对象的两种方式以及在使用equals()和“==”两种方法时的区别
- java中的引用类型概念和String两种实例化方式的区别
- Java中String两种不同创建方式的区别及intern的用法
- 【JAVA基础】关于JAVA中的static方法、并发问题以及JAVA运行时内存模型
- java中的基本数据类型和引用数据类型以及它们的存储方式堆内存和栈内存
- Java中String两种不同创建方式的区别及intern的用法
- C# 数据类型的引用类型、值类型内存存储方式以及区别; 函数参数传递的引用传递(址传递)、值传递区别
- String 的两种创建方法及存储方式
- java中“==”和equals方法的区别,再加上特殊的String引用类型
- 关于iOS中图片加载的两种方式的区别以及和内存的关系
- String 的两种创建方法及存储方式
- String 的两种创建方法及存储方式
- String 的两种创建方法及存储方式
- 复习一下基础:'C# 值类型和引用类型 以及作为方法参数的区别'
- String 的两种创建方法及存储方式
- 【JAVA基础小问题】Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?
- java中关于String 类型数据 的存储方式
- java基础关于创建线程的两种方式
- 关于java基础--基本数据类型封装以及String类方法讲解
- Java 创建字符串String的各种方法以及区别