关于变量的作用域02

package Quote;

public class VariableZion{
 
 
 public static void changeStr(int str[]){
        str[0] = 4;
        for(int i =0; i<str.length ; i++){
         System.out.print(str[i]+" ");
        }
       
    }
 
    public static void changeStr(int str){
        str = 2;
        System.out.println(str);
    }

    public static void changeStr(String str){ 
        str = "name"; 
        System.out.println(str);
    } 

    public static void main(String[] args) {
        int s = 1;// 内存栈空间里,有一个变量s,值为1
        changeStr(s);//调用方法  在栈空间里 有一个变量形参str,值为直接传递进去的值,也就是1,之后执行方法str值变成2,打印,然后方法调用完成str消失
        //局部变量只在自己的作用域中有效,也就是说,在static方法中str=2只是在他的方法中有效,但是在方法体外面是无效的.
        System.out.println(s);
       //这里打印1, 如果变量名 s换成str 是一样的
        String str2 = "love";
        changeStr(str2); 
        System.out.println(str2);
       
        int chen[]= {1,2,3};
        changeStr(chen);//调用方法  在栈空间里 有一个变量形参str,也指向chen指向的数组里的内容,之后执行方法str[0]值变成4,打印,然后方法调用完成str消失
        for(int i=0 ;i<chen.length ; i++){
         System.out.print(chen[i]+" ");
        }
       
    }
}

/*这里需要解释一下,java基本类型(byte、int、char、long、float、double、boolean和short)是传值,也就是传的是副本,
* 而其余传的是引用(所谓引用传递就是把对象的引用地址传进函数,而不是像值传递那样产生一个副本),
* 对于字符串对象来说,虽然在参数传递的时候也是引用传递,
* 但是java虚拟机在函数内部对字符串对象进行了特殊处理--视String对象为常量(final)
*  所以对传进来的引用地址所引用的string对象不能直接进行修改,而是产生一个副本对其进行操作,对其进行的操作不会影响原来的值。
*  这就是为什么字符串和数组都是引用传递,字符串没变而数组变了的原因*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值