精华内容
下载资源
问答
  • JAVA传参

    2017-06-29 15:48:34
    JAVA传参

    JAVA传参
    从sql = sql.replace说起.
    sql.replace后sql值不变,String 是不可变的。replace是返回一个新值,用新的值去表示变化。

    
     public static void change(String a) {
    
            a = "bbb";
    
        }
    
        public static void change2(StringBuilder a) {
    
            a.delete(0,2).append("ccc");
    
        }
    
    
        public static void main(String[] args) {
    
            String a = "aaa";
    
            change(a);
    
            System.out.println(a);
    
            StringBuilder sb = new StringBuilder("eeee");
    
            change2(sb);
    
            System.out.println(sb);
    
            System.out.println(a);
        }

    可见String没被改变
    StringBuilder被改变

    解释:
    java传递的都是指针副本,String用例中,String 副本指向一个新的String,(String不可变),所以结束后旧副本还是指向老的String。StringBuilder用例中,传递引用副本后,对引用所指的内存进行了更改,旧副本指向的老的StringBuilder对象被更新。

    总结起来,java传递的是对象的引用副本,对于可以变对象,通过引用更新了内存。对于不可变对象,通过引用无法更新,即使=赋值也是开辟一块新内存,然后副本指向新内存,旧内存不变。

    展开全文
  • Java传参

    2016-06-15 10:13:03
    Java传参Java中传递参数,要么传递的是基本数据类型的值的副本,要么传递的是引用数据类型的引用(String类型属于引用数据类型,但由于它是final类,不可变类型,故在传参过程中,其值不会改变)参数类型为基本数据...

    Java传参

    Java中传递参数,要么传递的是基本数据类型的值的副本,要么传递的是引用数据类型的引用(String类型属于引用数据类型,但由于它是final类,不可变类型,故在传参过程中,其值不会改变)

    参数类型为基本数据类型

    示例代码

    public class Test {
    
        public static void main(String[] args) {
            int a = 10;
            boolean b = true;
            float f = 2.3f;
            char c = 'c';
    
            changeInt(a);
            changeBoolean(b);
            changeFloat(f);
            changeChar(c);
    
            System.out.println(a);//10
            System.out.println(b);//true
            System.out.println(f);//2.3
            System.out.println(c);//c
        }
    
        public static void changeChar(char c) {
            c = 'r';
        }
    
        public static void changeFloat(float f) {
            f = 5.4f;
        }
    
        public static void changeBoolean(boolean b) {
            b = !b;
        }
    
        public static void changeInt(int a) {
            a = 100;
        }
    
    }
    

    根据以上代码的输出结果可以看出:当传参类型为基本数据类型时,传递的是值的副本,并不会改变值本身。

    参数类型为引用数据类型

    示例代码

    public class Test {
    
        public static void main(String[] args) {
            char[] ch = {'l', 'o', 'v', 'e'};
            StringBuilder sb = new StringBuilder("abc");
            System.out.println(ch);//love
            System.out.println(sb);//abc
    
            changeCh(ch);
            changeSb(sb);
    
            System.out.println(ch);//dove
            System.out.println(sb);//abcefg
        }
    
        private static void changeSb(StringBuilder sb) {
            sb.append("efg");
        }
    
        private static void changeCh(char[] ch) {
            ch[0] = 'd';
        }
    
    }
    

    根据以上代码的输出结果可以看出,当参数的数据类型为引用数据类型时,传递的是引用的副本。我们应当了解引用数据类型的创建方式:User u1 = new User();这样就创建了一个User类的对象,u1是变量名,它存放在栈内存上,u1的值为其指向的user对象所在堆内存上的地址,它只是一个对象的引用,而不是对象的本身。在进行传递时,传递的也只是这个引用的副本,当这个副本的值改变时,原引用的值并不会受到影响。

    展开全文
  • java 传参

    2014-06-08 10:50:03
    java 传参这个问题,对于简单类型是直接值传递,复杂lei'yin

    java 传参这个问题,对于简单类型是直接值传递,复杂类型是引用传递,值传递先不说了,引用传递用两个例子说明。主要是说明一下String传递的一个容易错的地方。。。

    例子1

    public class Test {
    	
    	public static void changeString(StringBuffer a){
    		a .append( " ,world" );	
    	}
    	
    	public static void main(String [] args){
    		StringBuffer a = new StringBuffer("Hello");//'= "Hello";
    		System.out.println(a);
    		changeString(a);
    		System.out.println(a);
    	}
    }
    

    输出结果是:

    Hello
    Hello ,world

    结果显而易见,这是一个引用传递,在函数changeString中改变了原来的字符串,而仔细看时,发现这个例子用的是StringBuffer这个类,为什么不用String呢,因为String没有append这个方法,学渣是个喜欢问为什么的人,于是乎,自己写一个String的例子,如下

    public class Test {
    	
    	public static void changeString(String a){
    		a += " ,world" ;	
    	}
    	
    	public static void main(String [] args){
    		String a = new String("Hello");//'= "Hello";
    		System.out.println(a);
    		changeString(a);
    		System.out.println(a);
    	}
    }

    输出结果是:

    Hello
    Hello

    学渣第一次看到这个结果时,几乎颠覆了世界观,难道java的引用传递分情况么,后来上网一查才知道。。。让String骗了。。。。

    其实概念中的传引用是图1这个样子的


    而我们的String的+=或者=都是相当于new了一个新的字符串,并把指针指向了新的字符串,旧的字符串根本没动,如图2,所以有了第二个例子的现象







    展开全文
  • java传参

    2019-09-13 00:50:01
    不造轮子,原文地址:... 之前用的c/c++比较多,在c/c++中对于传参类型,无外乎就是传值、传引用、传指针这几种。但在java中,由于没有指针类型,其传参的方式也发生了相应的变化。根...

    不造轮子,原文地址:https://www.cnblogs.com/wangkundentisy/p/6636340.html

      之前用的c/c++比较多,在c/c++中对于传参类型,无外乎就是传值、传引用、传指针这几种。但在java中,由于没有指针类型,其传参的方式也发生了相应的变化。根据网上的信息,按我之前的理解,java中传参方式应该主要有两种传值和传引用

    一  传值

      java中的传值即传递的是原变量的一个副本。基本的数据类型,如:char,int,double等类型的变量向函数传递的参数,都是变量的副本都属于传值。函数内部不论进行任何操作,都不影响变量本身,影响的只是变量的副本。

    例如:

    public class Test {
    
        public static void main(String[] args){
    
            int a = 1, b = 2;
    
            fun(a,b);
    
            System.out.println("a="+a);
    
             
    
        }
    
        static void fun(int m , int n)
    
        {
    
            m = m + n;
    
             
    
        }
    
    }


    二  传引用  运行结果为:a = 1.    a的值并没有发生变化, 说明此处的传参是传的值。

      从表面上来看,java中的对象类型都是传递的引用,而不是传递的值。首先,来看一个例子(此处以LinkedList对象为例):

    public class Test {
    
        public static void main(String[] args){
    
            List<String> str_1 = new LinkedList<String>();
    
            str_1.add("111");
    
            fun(str_1);
    
            System.out.println("str_1 ="+str_1);
    
        }
    
        static void fun(List s)
    
        {
    
                s.add("222");
    
        }
    
    }

     

    public class Test {
    
        public static void main(String[] args){
    
            List<String> str_1 = new LinkedList<String>();
    
            List<String> str_2 = new LinkedList<String>();
    
            str_1.add("111");
    
            str_2.add("333");
    
            fun(str_1,str_2);
    
            System.out.println("str_1 ="+str_1);
    
            System.out.println("str_2 ="+str_2);
    
        }
    
        static void fun(List s,List m)
    
        {
    
                List<String> str = new LinkedList<String>();
    
                str = s;
    
                s = m;
    
                m = str;
    
        }
    
    }

     

      运行结果为: str_1 =[111, 222] .  从这个例子来看的话,java中兑现的传参应该是传的引用。那么,再看下面的一个例子:

      运行结果为:str_1 =[111] , str_2 =[333] .我们发现str_1与str_2的值并没有发生交换。 如果该对象传的是引用的话,那它们两个的值应该发生了变化才对。

      然而,java中对象作为实参,传递的实际上还是值,即java中的传参传递的都是值!为什么会这么说?我会从jvm的构成的角度来解释一下自己对这个问题的理解。接下来我们先看一下JVM的结构:

    三  JVM的结构及相应的解释

      JVM的结构图如下:

     

      从Jvm的结构图上可以看出来,Jvm在实现的时候将属于它的内存分为五部分,其中程序代码(严格的说应当是字节码)和基本的数据类型是放在java栈的栈帧中,而对象是从堆中分配的,堆这个东西我认为可以理解成“对象池”。程序和程序中需要用到的对象放在两个相对独立的区域中,那么程序怎么使用对象呢?实际上是程序中真正使用对象的地方其实只是声明了一个对象的引用,也就是把堆中分配了的相应对象的地址放到引用中,当然引用也是放在栈内存中,栈和堆之间就是通过一个一个的引用来联系的。至于引用,我们可以把它看做是一个指针常量,说白了,就是一个数值,这个数值所表达的是引用对象的地址。所以,不管是基本类型变量(int,float,double等)还是对象,相应的内存地址中存放的都是一个数(无符号整数,整数,浮点数等)。当方法调用时候,方法的参数会占内存中开辟一块新的区域,同时把要传递的基本类型,或者引用类型名称复制到这块内存中,结果是,基本类型(存放在占内存中的)复制之后连同其数值也复制到了这块内存中,而对象只是复制了引用名,实际还要联系到原对象所在的堆区域中。之所以说java中传递的都是值,是因为传递得是内存地址中的数,当然,这个值对于基本类型和对象类型来说意义是不一样的,对于基本类型这个数就是其值本身,传递值的结果就是,改变新的变量的值不影响旧的变量的值;而对于对象来说这个数是它的地址,传递这个值就相当于传递了真实对象的引用,传递了引用或者说是地址的结果就是变化会全局可见。所以说java中的方法都是按值调用的!只不过基本类型和对象类型的"值"的在具体的机制上作用不同。

    所以在第二个例子中,fun方法中,两个list s和m交换,实际只是str_1与str_2在栈中对应的引用值进行了交换,而引用与相应堆区域的联系并没有改变。因此,str_1与str_2的值并没有发生变化。

      综上,java中不论是基本类型还是对象,方法调用时,传递的都是值!

      1.对于基本类型的变量,相当于操作其副本。

      2.对于对象,相当于复制了一个引用,该引用指向的还是原变量的内存区域。

    转载于:https://my.oschina.net/u/3634161/blog/1824149

    展开全文
  • Java 传参

    2018-12-15 17:01:29
    参数也是变量,所以传参分为  基本类型传参  类类型传参 步骤 1 : 基本类型传参 基本类型传参  在方法内,无法修改方法外的基本类型参数 public class Hero { String name; //姓名 float hp; //血量 ...
  • Java 传参探索

    2019-08-07 20:45:39
    Java 传参探索 本文地址:https://blog.lucien.ink/archives/463/ 结论 对于复杂类来说,Java传参时实际上传递的是这个类的地址,但是对于基本类型,如 Integer 和 String ,在传参时传递的是一个拷贝。 代码 ...
  • Java 传参传值

    2019-01-05 16:48:05
    Java 传参传值 案例代码 public class PassParamExplain { public static void main(String[] args) { //example A System.out.println("example A:"); Integer a = 201...
  • 彻底解决java传参问题

    2021-02-05 14:15:37
    参数传递的主要应用java传参的原理构造器传参函数传参值传递“引用”传递 java传参的原理 在java中参数的传递都是复制传递的,也就是先复制过后再传递,也就是说你传过来什么,它就复制什么,然后再用复制过来的数据...
  • 概述java中的参数传递问题可以根据参数的类型大致可以分为三类:传递基本类型,传递String类型,传递引用类型,至于最终是否可以归纳为值传递和引用传递,根据每个人的理解不同,答案不同,此处不做强调。...
  • java传参方式

    千次阅读 2017-09-01 17:02:58
    java传参分两种类型,java都是值传递 1.基本类型使用值传递,形参是对实参的一个拷贝,在方法里对形参修改不影响实参的值 2.引用类型是引用值传递,对于类的实例它传递的是类的引用,形参是对实参的引用值得...
  • Java传参机制详解

    2019-11-03 23:54:23
    Java传参机制 首先看下java中的参数传递机制: 基本数据类型传值(未传递地址)方式: class Main{ public static void main(String[] args) { Main main = new Main(); int a = 20; System.out....
  • Java传参的理解

    2020-09-25 20:15:10
    首先说明结论,java传参的本质是值传递。 我是这么理解的(如果说的不对,请指出)。对于java来说,基本类型就是值传递,实参会copy一份数据给形参,所以函数体内的修改都是针对形参的,实参不受影响。 而引用数据...
  • Java 传参接受到却执行不了 项目场景: Java Idea springboot 问题描述: Java 传参接受到却执行不了 System.out.println(imageData.getImgFilePath()); Boolean bl = ImageUtils.GenerateImage(imageData.get...
  • 首先非常确定地说:如果你对“传引用”、“传值”的理解是来源于C 或 C++中指针问题的话,那么Java的参数传递就是传值!想到考虑这个问题是在读java.util的Timer源码时看到了这几条语句TimerTask tmp = queue[j]; ...
  • int,long,float,double,boolean,char)存储的都是值2、所有的“对象”(粗略理解成new出来的东西,包括数组)存储的都是指针(PS:最好不理解成引用,不然会有点麻烦,以下按照指针理解)按照这样理解,java传参就...
  • 最近做练习时碰到一个问题,Java到底是怎样传参的,经过查资料与实验,我发现Java传参都是传引用变量的副本值。1 Java中的引用变量1.1字面值引用变量:即基本数据类型的引用变量 ,如 int b = 1 , b就是字面值引用...
  • java利用方法参数传递这个问题困扰了我一天,关于java传参有三种传递方式,《java核心技术卷I》里也提到了。 1.一个方法不能修改一个基本数据类型的参数 ( 即数值型或布尔型 ),String类型也不行 。 2.一个方法...
  • Java传参 结论 如果参数是基本类型,Java方法参数传递的是基本类型值的拷贝。 如果参数是引用类型,Java传递的是所引用的对象在堆中地址值的拷贝 什么是基本类型和引用类型 基本类型:JAVA八种基本类型:byte、...
  • 对于基本数据类型(int, char etc.),传递的是基本数据类型的值的拷贝对于对象引用,传递的是对象对象在堆中地址值的拷贝数据内存分配每新创建一个线程,都会为线程分配一个该线程私有的栈空间,其中存储方法内部定义...
  • java传参,传的既不是引用也不是内容 经典案例 public class JavaTest { public static void main(String[] args) { String mes = "Hello"; transf(mes); System.out.println(mes); } private sta....
  • java传参调用fortran的exe可执行文件 需求:最近有一个任务,其核心部分主要是整合java和fortran之间的数据交互;java调用fortran的exe可执行文件,同时传递参数到fortran里面,以便fortran后续的处理, 下面我...
  • Java传参整理

    2020-06-24 17:55:47
    Java的同学想必少不了写接口传参,我在应用过程中对此总是一知半解,每次都是临时百度一通乱试。终于忍不了这种混沌的状态,决定整理清楚对应关系。 问题1:@RequestParam和@RequestBody分别对应什么场景? 问题...
  • 编写jasper模板工具 Jaspersoft Studio、iReport下载; Java传参List,Object>>导出pdf

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,292
精华内容 2,116
关键字:

java传参

java 订阅