java 参数传递

唉,老了!


搞了这么多年的,到头来基本的东西都忘记得差不多了!


1、Java中所有东东都是通过值传递。而对象,压根就不会被传递。

2、变量的值要么是原始类型,要么就是引用,而不是对象本身。


所以都是值传递,只不过这个值可能是原始类型的值,也可能是对象的地址(引用,见第二条)。

其实都是叫法不同,基本数据类型直接把数据复制一份,非基本数据类型(包括数组)把它的引用复制一份(其实就是内存地址),相当于多个引用指向同一个对像,调用其中任何一个引用改变这个对象,其他多个引用也随之改变,但当其中一个引用指向别的对象时,原来的引用不发生改变。

参考文章:http://tjuking.iteye.com/blog/1405532 的第二个例子, 函数中的对象只是其本身指向了别的对象,对于越来的对象和对象的应用时没有影响的。



参考:

原理:java参数传递(超经典): http://blog.sina.com.cn/s/blog_4b622a8e0100c1bo.html


表象: http://blog.csdn.net/steedhorse/article/details/6892569


或者这么说: 

1. 原始类型是值传递

2. 非原始类型是应用传递(也就是传地址值,上文说的对象地址的意思)


简单增加一个通过main 往args里面传递数据的例子:

如下参数传递给public static void main(String[] args) {

a) -d "\\t" "E:\LearningMaterial\ebook\Data Mining\LensKit\grouplens-lenskit-hello-25c12e76a10e\src\dataset\ml-100k\u.data" 6

传递后,args[1]等于:  \\\\t

b) -d \t "E:\LearningMaterial\ebook\Data Mining\LensKit\grouplens-lenskit-hello-25c12e76a10e\src\dataset\ml-100k\u.data" 6

传递后,args[1]等于:  \\t

c)    -d "\t" "E:\LearningMaterial\ebook\Data Mining\LensKit\grouplens-lenskit-hello-25c12e76a10e\src\dataset\ml-100k\u.data" 6

传递后,args[1]等于: \\t

由此可以看出, main接受的参数都当作是没有转义意义的参数,都是必须参数。 如果需要转义,得自己用双引号或者单引号(不可变)进行封装。

d)准确做法,注意双引号中间空格是一个tab键

   -d "" E:\LearningMaterial\ebook\Data Mining\LensKit\grouplens-lenskit-hello-25c12e76a10e\src\dataset\ml-100k\u.data" 6

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值