java 方法 传参
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 方法 传参相关的知识,希望对你有一定的参考价值。
调用方法传入参数,难道不就是 byte a = 45;的意思吗?为啥会出错!请老哥老姐妹告诉我答案!
要是想传字面量的话 就这样
public class D
public static void main(String[] args) throws Exception
byte a = 45;
t(a);
t((byte)45);
public static void t(byte a)
System.out.println(a);
正确的传参方式
嗯,老哥
嗯,byte a = 45; 这里的45没超过左边数据的类型编译器就自动给它强转,若是超过了范围就不自动给它强转了,对吗
追答如果是byte的字面量一定是要说明的哪怕是0也要(byte)0
嗯。那亲,解释下,byte a = 45;
这里的45不是默认int型吗?为啥无需强转呢
追答这里声明的btye 实际上应该叫做signed byte,8位的二进制组成。取值范围在十进制的-128~127。也就是说你所声明的45 二进制来表示的话就是 0100 0101
至于如果超过127 又如何呢?
127 是01111111
-128为10000000
java是强类型语言,同样的方法有重载的概念.即方法名相同,参数不同,则认为是两个不同的方法.你既然传的是int型,则java只会寻找参数是int类型的方法.
假设java连参数是byte型的方法也去调用,如果同时存在参数是byte型,和参数是int型的相同名字的方法,java怎么处理这种情况?追问
老哥,牛逼,一语点破梦中人
其他人都要么不懂装懂,要么没说在电子上!
点
追答这个东西有个已知的特例。
一个接收int参数的方法,可以给char。我也不知道java为什么要做么做。
byte a=45;
abc(a);//或者是abc((byte)45)
public static void abc(byte a)
追问
那不是变量名,那是提示,亲
idea所有的提示
追答一直用eclipse
参考技术C 这里主要是因为Java的默认类型导致的,像你直接传字面量45,默认是int类型的,但是你的abc方法需要的参数类型是byte的,所以给你报错了。上面byte直接赋值45不报错的原因是因为java的自动拆装箱,你赋值的时候他自动把int的45转换成byte然后赋值给了a,所以不会报错。追问
亲,你说错了,那不是装箱和拆箱哦,要是也是强转
追答果然说的多,错的多
参考技术D 调用 abc() 函数的时候,参数写a,别写45。abc(a)
byte a = 45 ,45默认是int类型,这里没有报错,因为这里有个类型强转。
你定义的函数abc() 参数是byte类型,传参的时候就只能传byte类型的参数。追问
嗯,byte a = 45; 这里的45没超过左边数据的类型编译器就自动给它强转,若是超过了范围就不自动给它强转了,对吗
java方法传参机制
一、基本数据类型传参机制
基本数据类型传参是按值拷贝,形参改变不会影响实参。
二、引用类型传参机制
引用类型传参是按地址传参,形参改变会影响实参,分析以下代码,看看传入参数arr1数组的值会不会发生改变
package myworkspace01;
public class FirstSample
public static void main(String[] args)
int[] arr1= 1,2,3;
A a1=new A();
a1.test(arr1);
System.out.println(arr1[0]);
class A
public void test(int[] arr)
arr[0]=200;
结果arr1[0]的值发生了改变,我们引入引用类型传参机制
引用类型传参机制:因为参数是引用类型, 传的是地址,所以test方法里面的arr也是地址,和arr1一样指向0x0011的数组。所以改变arr[0]就是改变指向的数组下标0的值,因为arr1也指向那个数组,所以也改变了值。
以上是关于java 方法 传参的主要内容,如果未能解决你的问题,请参考以下文章