java中理解引用数据类型

一.java中基础数据类型与引用数据类型的区别

1.1基础数据类与引用数据类型介绍

   1.基础数据类型:①整数类型:long、int、short、byte
                               ②浮点类型:float、double
                               ③字符类型:char
                               ④布尔类型:boolean

 2.引用数据类型:类、 接口类型、 数组类型、 枚举类型、 注解类型、 字符串型,例:String类型就是引用类型。

1.2存储位置的区别 

基本变量类型

  • 在方法中定义的非全局基本数据类型变量的具体内容是存储在栈中

引用变量类型

  • 只要是引用数据类型变量,其具体内容都是存放在堆中的,而栈中存放的是其具体内容所在内存的地址

如图:

基本数据类型                                           引用数据类型:

   java中理解引用数据类型_第1张图片                   java中理解引用数据类型_第2张图片                      

1.3传递方式的区  

基本变量类型

  • 在方法中定义的非全局基本数据类型变量,调用方法时作为参数是按数值传递

  java中理解引用数据类型_第3张图片

引用变量类型

  • 引用数据类型变量,调用方法时作为参数是按引用传递的,传递的是引用的副本

 java中理解引用数据类型_第4张图片

 二.String判断字符串相等        

     2.1java中字符串的基本存储原理

           1.常量池中的字符串仅是符号,第一次用到的时候才变为对象

           2.利用串池的机制,来避免重复创建字符串对象

           3.字符串常量拼接原理是StringBuilder(1.8)

           4.可以使用intern方法,主动将串池中还没有的字符串放入串池(1.8是放入,1.6是复制副本放入

2.2举例

public class ComPareString {
    public void test(){
        String str1="a";//"a"第一次用到,变为对象
        String str2="b";
        String str3="a";//判断str1==str3为true,str1与str2指向的都是在串池中的对象"a"


        String str4="ab";
        String str5="a"+"b";//判断str4==str5为true,str4在编译的过程中就完成了拼接为"ab"
                            // ,与上述同理,与str4所指是同一对象
        String str6=str1+str2;//判断str4==str6为false,str1与str2为变量,实际上是
         //new StringBuilder().append("a").append("b").toString(),即new String("ab") 
         //新创建了对象,并不是在串池中的"ab",所以为false
        
        
        
        String str7=str6.intern();
        //将str6字符串对象放入串池中,如果串池中有就不会放入,如果没有就会放入,最后会把串池中的对象返回
        //所以str7现在所指的对象与str4是一样的,str4与str6不相等,故判断str6==str7为false
        
        
        String s8=new String("abc");
        String s9=s8.intern();//判断s8==s9,如果jdk为1.8则为true,如果jdk为1.6则为false
    }
}

三.java创建链表错误点总结

Node h = new Node();
Node n=new Node();
Node n2=h.next;
n2=n;
//奇奇怪怪的错误(捂脸),无论next是null或是非null都不可以这样写,n2=n就是把n的引用赋值给了n2,这样的话n2与h.next就没有任何关系了

//正确写法
n.next=null;
h.next=n;

你可能感兴趣的:(java)