java的参数值传递

      今天被问到一个问题,什么情况下java参数的传递为值传递,什么情况为引用传递,回答是基本数据类型如 int, float, double等为值传递,对象形式的参数为引用传递,这个回答被人给反驳了,理由是String 也是对象,为什么是值传递呢? 无语,这个我真不知道。

 

       于是我把值传递与引用传递的几种情况做了个例子,尽量做得最简单。

 

  1) 自定义对角的传递。

 

public class Test {
	
	
	
	@SuppressWarnings("unchecked")
	public Test()
	{
		Catalog catalog =new Catalog();
		catalog.setId(1L);
		catalog.setName("食品");
		catalog.setShortname("工业基");
		catalog.setTpl("ttp");
		catalog.setFoods(new LinkedHashSet());
		System.out.println(TypeUtil.typeToString("catalog", saveCatalog(catalog)));
	}
	
	private void initDefValue(Catalog catalog) {
	
		 catalog.setId(2L);
		 catalog.setName("FOOFOO");
	}
	
        public Catalog	saveCatalog(Catalog catalog)
       {
	   initDefValue(catalog);
	   return catalog;
       }
   
       public static void main(String[]arg)
      {
	   
	   Test test =new Test();
      }

    }

  

    运行结果为:

    catalog.id: 2
    catalog.name: FOOFOO
    catalog.shortname: 工业基
    catalog.tpl: ttp
    catalog.foods[]: empty

     1) java对角的传递。  

public class Test2 {

	public Test2()
	{
		Set<Catalog> catalogSet =new LinkedHashSet<Catalog>();
		Catalog catalog =new Catalog();
		catalog.setId(1L);
		catalog.setName("食品");
		catalog.setShortname("工业基");
		catalog.setTpl("ttp");
		catalog.setFoods(new LinkedHashSet());
		catalogSet.add(catalog);
		changeSet(catalogSet);
		System.out.println(TypeUtil.typeToString("Set",catalogSet));
	}
	public void changeSet(Set<Catalog> catalogSet)
	{
		Catalog catalog2 =new Catalog();
		catalog2.setId(1L);
		catalog2.setName("水果");
		catalog2.setShortname("食品基");
		catalog2.setTpl("ccf");
		catalog2.setFoods(new LinkedHashSet());
		catalogSet.add(catalog2);
	}
	
	public static void main(String[] args) {
		
           Test2 test2 =new Test2();
	}

}

 

运行结果为:

Set[0].id: 1
Set[0].name: 食品
Set[0].shortname: 工业基
Set[0].tpl: ttp
Set[0].foods[]: empty
Set[1].id: 1
Set[1].name: 水果
Set[1].shortname: 食品基
Set[1].tpl: ccf
Set[1].foods[]: empty

 

  1) String与int 的传递。

public class Test3 {

	public Test3()
	{
		String str =new String("99990");
		int num =999;
		changeValue(str,num);
		System.out.println(str);
		System.out.println(num);
	}
	public void changeValue(String str,int num)
	{
		str ="111111";
		num=20;
	}
	
	public static void main(String[] args) {
		
		Test3 test3 =new Test3();

	}

}

 运行结果为:

 99990
 999

 

结果正如人家反驳的那样子,于是把String类拿出来看了下子, 顶上面就有注释。

写道
/**
* The <code>String</code> class represents character strings. All
* string literals in Java programs, such as <code>"abc"</code>, are
* implemented as instances of this class.
* <p>
* Strings are constant; their values cannot be changed after they
* are created. String buffers support mutable strings.
* Because String objects are immutable (永远不变的)they can be shared. For example:
* <p><blockquote><pre>
* String str = "abc";
* </pre></blockquote><p>
* is equivalent to:
* <p><blockquote><pre>
* char data[] = {'a', 'b', 'c'};
* String str = new String(data);
* </pre></blockquote><p>
* Here are some more examples of how strings can be used:
* <p><blockquote><pre>
* System.out.println("abc");
* String cde = "cde";
* System.out.println("abc" + cde);
* String c = "abc".substring(2,3);
* String d = cde.substring(1, 2);
* </pre></blockquote>
* <p>
* The class <code>String</code> includes methods for examining
* individual characters of the sequence, for comparing strings, for
* searching strings, for extracting substrings, and for creating a
* copy of a string with all characters translated to uppercase or to
* lowercase. Case mapping is based on the Unicode Standard version
* specified by the {@link java.lang.Character Character} class.
* <p>
* The Java language provides special support for the string
* concatenation operator ( + ), and for conversion of
* other objects to strings. String concatenation is implemented
* through the <code>StringBuilder</code>(or <code>StringBuffer</code>)
* class and its <code>append</code> method.
* String conversions are implemented through the method
* <code>toString</code>, defined by <code>Object</code> and
* inherited by all classes in Java. For additional information on
* string concatenation and conversion, see Gosling, Joy, and Steele,
* <i>The Java Language Specification</i>.
*
* <p> Unless otherwise noted, passing a <tt>null</tt> argument to a constructor
* or method in this class will cause a {@link NullPointerException} to be
* thrown.
*
* <p>A <code>String</code> represents a string in the UTF-16 format
* in which <em>supplementary characters</em> are represented by <em>surrogate
* pairs</em> (see the section <a href="Character.html#unicode">Unicode
* Character Representations</a> in the <code>Character</code> class for
* more information).
* Index values refer to <code>char</code> code units, so a supplementary
* character uses two positions in a <code>String</code>.
* <p>The <code>String</code> class provides methods for dealing with
* Unicode code points (i.e., characters), in addition to those for
* dealing with Unicode code units (i.e., <code>char</code> values).
*
* @author Lee Boynton
* @author Arthur van Hoff
* @version 1.205, 02/26/09
* @see java.lang.Object#toString()
* @see java.lang.StringBuffer
* @see java.lang.StringBuilder
* @see java.nio.charset.Charset
* @since JDK1.0
*/

 

是不是可以这样理解, String类是final的, 所以与Integer,Byte,Long,Double等等一样不能改变,每次改变都是创建新对象,或是直接赋的常量值,它们可以用做类来使用,但在传参是是值传递。

 

 

Delphi 12.3 作为一款面向 Windows 平台的集成开发环境,由 Embarcadero Technologies 负责其持续演进。该环境以 Object Pascal 语言为核心,并依托 Visual Component Library(VCL)框架,广泛应用于各类桌面软件、数据库系统及企业级解决方案的开发。在此生态中,Excel4Delphi 作为一个重要的社区开源项目,致力于搭建 Delphi 与 Microsoft Excel 之间的高效桥梁,使开发者能够在自研程序中直接调用 Excel 的文档处理、工作表管理、单元格操作及宏执行等功能。 该项目以库文件与组件包的形式提供,开发者将其集成至 Delphi 工程后,即可通过封装良好的接口实现对 Excel 的编程控制。具体功能涵盖创建与编辑工作簿、格式化单元格、批量导入导出数据,乃至执行内置公式与宏指令等高级操作。这一机制显著降低了在财务分析、报表自动生成、数据整理等场景中实现 Excel 功能集成的技术门槛,使开发者无需深入掌握 COM 编程或 Excel 底层 API 即可完成复杂任务。 使用 Excel4Delphi 需具备基础的 Delphi 编程知识,并对 Excel 对象模型有一定理解。实践中需注意不同 Excel 版本间的兼容性,并严格遵循项目文档进行环境配置与依赖部署。此外,操作过程中应遵循文件访问的最佳实践,例如确保目标文件未被独占锁定,并实施完整的异常处理机制,以防数据损毁或程序意外中断。 该项目的持续维护依赖于 Delphi 开发者社区的集体贡献,通过定期更新以适配新版开发环境与 Office 套件,并修复已发现的问题。对于需要深度融合 Excel 功能的 Delphi 应用而言,Excel4Delphi 提供了经过充分测试的可靠代码基础,使开发团队能更专注于业务逻辑与用户体验的优化,从而提升整体开发效率与软件质量。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值