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 }


原文地址:https://www.cnblogs.com/YangGC/p/8488810.html