• String类型的理解


    引用:https://www.cnblogs.com/binyue/p/3862276.html

    java语言中:

    变量除了八大基本数据类型(byte,short,int,long,boolean,float,double,char)

    基本剩下的数据类型都是引用类型(类类型,接口类型,数组)

    区别:

    Java中数据类型分为两大类,基本类型和对象类型。相应的,变量也有两种类型:基本类型和引用类型。
    基本类型的变量保存原始值,即它代表的值就是数值本身;
    而引用类型的变量保存引用值,"引用值"指向内存空间的地址,代表了某个对象的引用,而不是对象本身,
    对象本身存放在这个引用值所表示的地址的位置。

    对于数据类型不同,在用的过程中,会发现不同的有趣现象,这也被面试的时候,经常迷惑一下面试者,看看对java的理解程度,下面就举几个例子:

    int a;
    a = 6;//这个语句是正确的,八大数据类型赋值的时候必须要赋初值,否则会报错
    
    String str;//String不属于八大数据类型,在引用的时候,就自动分配了一个地址
          //如果直接输出System.out.println(str.toString());会报错,提示没有赋初始值,java在编译时候,会对没有使用的变量忽略,进行垃圾回收

    引用传递和值传递

    引用传递也称为传地址。方法调用时,实际参数的引用(地址,而不是参数的值)被传递给方法中相对应的形式参数,函数接收的是原始值的内存地址;
    在方法执行中,形参和实参内容相同,指向同一块内存地址,方法执行中对引用的操作将会影响到实际对象。(这也就是为什么数组进行自定义排序方法的时候,不用在方法体中return的原因)

    值传递:

    方法调用时,实际参数把它的值传递给对应的形式参数,函数接收的是原始值的一个copy,此时内存中存在两个相等的基本类型,即实际参数和形式参数后面方法中的操作都是对形参这个值的修改,不影响实际参数的值

    引用传递:

     也称为传地址。方法调用时,实际参数的引用(地址,而不是参数的值)被传递给方法中相对应的形式参数,函数接收的是原始值的内存地址;
    在方法执行中,形参和实参内容相同,指向同一块内存地址,方法执行中对引用的操作将会影响到实际对象

    Date date;
    //执行实例化,开辟数据空间存放Date对象,然后把空间的首地址传给today变量 
    //date=new Date();
    //如果注释掉上一步操作
    //The local variable date may not have been initialized
    //也就是说对象的数据空间没有分配
    date.getDate();

    看一个例子:

    class MyObj{
        public int b=99;
    }

    分别传参int和对象类型:

     1 public class ReferencePkValue2 {
     2      
     3     public static void main(String[] args) { 
     4         ReferencePkValue2 t = new ReferencePkValue2(); 
     5         int a=99; 
     6         t.test1(a);//这里传递的参数a就是按值传递 
     7         System.out.println(a);
     8          
     9         MyObj obj=new MyObj(); 
    10         t.test2(obj);//这里传递的参数obj就是引用传递
    11         System.out.println(obj.b);
    12     } 
    13      
    14     public void test1(int a){ 
    15         a=a++;
    16         System.out.println(a);
    17         } 
    18      
    19     public void test2(MyObj obj){ 
    20         obj.b=100;
    21         System.out.println(obj.b);
    22         }
    23 }


  • 相关阅读:
    CocosCreator-Widget,前后台切换
    Unity获取未激活游戏对象的方法 、坐标转换
    Mathf函数
    C# activeSelf、activeInHierarchy、SetActive、SetActiveRecursively
    C# 碰撞,射线,点击,周期函数等基本代码
    TCP/IP 协议栈
    笔记—《程序员自我修养》
    Container With Most Water 双指针法
    多线程服务器 编程模型
    c++ 高效并发编程
  • 原文地址:https://www.cnblogs.com/YangGC/p/8488810.html
Copyright © 2020-2023  润新知