总结:

许多编程语言都有2种方法将参数传递给方法------按值传递和按引用传递。 

  与其他语言不同,Java不允许程序员选择按值传递还是按引用传递各个参数,基本类型(byte--short--int--long--float--double--boolean--char)的变量总是按值传递。就对象而言,不是将对象本身传递给方法,而是将对象的的引用或者说对象的首地址传递给方法,引用本身是按值传递的-----------也就是说,讲引用的副本传递给方法(副本就是说明对象此时有两个引用了),通过对象的引用,方法可以直接操作该对象(当操作该对象时才能改变该对象,而操作引用时源对象是没有改变的)。 

  现在说说数组:如果将单个基本类型数组的元素传递给方法,并在方法中对其进行修改,则在被调用方法结束执行时,该元素中存储的并不是修改后的值,因为这种元素是按值传递,如果传递的是数组的引用,则对数组元素的后续修改可以在原始数组中反映出来(因为数组本身就是个对象,int[] a = new int[2];,这里面的int是数组元素的类型,而数组元素的修改是操作对象)。 

  对于单个非基本类型数组的元素在方法中修改,则在被调用方法结束执行时,该元素中存储的是修改后的值,因为这种元素是按引用传递的,对象的改动将在源数组的数组元素中反映出来。

 
 
[单选题]
检查程序,是否存在问题,如果存在指出问题所在,如果不存在,说明输出结果。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package algorithms.com.guan.javajicu; 
public class Example { 
  String str = new String("good"); 
  char[] ch = {'a','b','c'}; 
  public static void main(String[] args) { 
     Example ex = new Example(); 
     ex.change(ex.str, ex.ch); 
     System.out.print(ex.str +"and"); 
     System.out.print(ex.ch);  
  
    
  public void change(String str, char ch[]){ 
     str= "test ok"
     ch[0]= 'g'
  
  • test okandabc
  • test okandgbc
  • goodandabc
  • goodandgbc

解释:

  (1)java 中String是 immutable的,也就是不可变,一旦初始化,其引用指向的内容是不可变的。也就是说,String str = “aa”;str=“bb”;第二句不是改变“aa”所存储地址的内容,而是另外开辟了一个空间用来存储“bb”;同时由str指向原来的“aa”,现在已经不可达,GC时会自动回收。因此String作为参数传进来时候,str= "test ok"; 实际给副本引用str指向了新分配的地址,该地址存储“test ok”。
      (2)String是值传递,数组的引用传递。
              为什么后面的数组就是传引用呢?
       一篇讲String值传递的博文
因此,原先的str仍然指向“good”

最新文章

  1. 浅析jquery ajax异步调用方法中不能给全局变量赋值的原因及解决方法(转载)
  2. cocos2dx中的ScrollView
  3. MVC3升级为MVC4
  4. [课程设计]Scrum 2.4 多鱼点餐系统开发进度(下单一览页面修复)
  5. kafka迁移数据目录
  6. stm32定义GPIO口方向和操作的代码
  7. Win2D 官方文章系列翻译 - DPI (每英寸点数)和 DIPs(设备独立像素)
  8. 【Python】Eclipse和pydev搭建Python开发环境
  9. 小白日记35:kali渗透测试之Web渗透-手动漏洞挖掘(一)-默认安装引发的漏洞
  10. Navicat_Preminum
  11. JQuery DataTables Editor---页面内容修改&&数据库信息修改 (1)
  12. FieldInfo.IsSpecialName Property【转】
  13. Asp.net mvc 中Action 方法的执行(三)
  14. 第1章 发现端点(Discovery Endpoint) - IdentityModel 中文文档(v1.0.0)
  15. nginx 配置访问 静态文件
  16. 使用第三方插件Gear Tacks 画齿轮
  17. 整理了一周的Python资料,包含各阶段所需网站、项目,收藏了慢慢来
  18. 第三个Sprint ------第二天
  19. 如何用git将项目代码上传到github
  20. python与系统做交互常用的模块和使用方法

热门文章

  1. uistepper on ios versions prior to 5.0
  2. stm32上的Lava虚拟机开发进度汇报(3)
  3. mysql 找不到或无法加载已注册的 .Net Framework Data Provider
  4. ResultSet转成java类对象
  5. 通过程序 VB.Net 或 C# 读取文本文件行数
  6. Android系统Recovery工作原理之使用update.zip升级过程分析(一)
  7. Key Task
  8. 实例源码--Android简单音乐播放器源码
  9. centos6安装redis
  10. PHP.6-PHP环境搭建(Windows环境下)-LAMP