相关疑难解决方法(0)

String和Vector之间的差异作为方法的参数

当我使用字符串作为方法的参数时,函数中字符串的更改不会反映在调用函数中.简单的理由按价值传递.

但是当使用向量时,对向量的更改将反映在调用函数中.所以我的问题是传递向量就像调用引用一样,我们在内存中发送地址而不是变量,因此函数内的任何更改都会反映在调用函数中

------------------------更新------------------------- -------

所以向量必须仅通过引用传递?我不能正常做到吗?

当然你可以正常传递它们(通过值传递它们).但是当你按值传递对象时,会发生一个新对象,然后将传递的对象复制到新对象.此,对于标准类型(字符型,整型,浮点等等)是确定的,因为标准类型的体积小(char是一个字节,短为2,int是2或4,长为4等...).然而,矢量并不小.试着这样做:

1
2
3
4
5
6
7
8
9
10
11
12

#include <iostream>
#include <vector>
using namespace std;

int main()
{
     vector<int> v;
     cout << sizeof(v) << endl;

     system("pause");
     return 0;
}
Run Code Online (Sandbox Code Playgroud)

在我的电脑中我得到12作为输出.这是12个字节.因此,我不是通过值传递,而是通过引用传递它,其成本为4个字节(包含我的向量地址的变量的大小)

c++

0
推荐指数
1
解决办法
123
查看次数

Java返回值,对象引用

我已经阅读了Jon Skeet 关于在Java中传递值的[优秀]文章,并在同一主题上看到了这个问题.我相信我理解他们,但我仍然想知道的是回报价值.

当一个对象被返回时(来自一个getter),然后在它的原始范围(它来自它)中被改变的是被赋予getter的返回值的变量所拥有的对象引用被改变了吗?那个满口的男孩..
借一个例子:

public class Dog {

    String dog ;

    public String getName()
    {
        return this.dog;
    }

    public Dog(String dog)
    {
        this.dog = dog;
    }

    public void setName(String name)
    {
        this.dog = name;
    }

    public static void main(String args[])
    {
        Dog myDog = new Dog("Rover");
        String dogName = myDog.getName();
        myDog.setName("Max");
        System.out.println(dogName);
    }
}
Run Code Online (Sandbox Code Playgroud)

这会打印Rover还是Max

更新 是否打印流动站.

我原来问题的答案很棒,但Richard Tingle在下面的评论中添加了很多有用的信息,所以我想我会为后代提供我的测试课程.

public class Foo {
    private ArrayList<Integer> arrayList;

    public Foo() {
        arrayList = …
Run Code Online (Sandbox Code Playgroud)

java scope return-type return-value

0
推荐指数
1
解决办法
165
查看次数

需要你的帮助理解java编程概念

public class Concept {    
    int num;    
    public static void main(String args[])    
    {    
        Concept obj1=new Concept();    
        Concept obj2=obj1;    
        obj1.num=100;    
        obj2.num=200;    
        System.out.println(obj1.num);    
        System.out.println(obj2.num);    
        //obj1.num=null;    

        obj2.num=500;    

        System.out.println(obj1.num);    
        System.out.println(obj2.num);    
    }   

}     
Run Code Online (Sandbox Code Playgroud)

在这里,这是一个简单的java程序.

输出是

200
200
500   
500
Run Code Online (Sandbox Code Playgroud)

内存分配如何在这里工作?如何将null设置为Obj1.num = null?

java memory memory-management class object

0
推荐指数
2
解决办法
105
查看次数

添加到ArrayList中已有的Integer

我已经存在了ArrayList<Integer>,我想Integer在特定索引处添加1 .但是,它给我的错误是"赋值的左侧必须是变量".它是这样的:

arrayListOfIntegers.get(i) += 1;
Run Code Online (Sandbox Code Playgroud)

java integer arraylist

0
推荐指数
1
解决办法
76
查看次数

更改Java中方法中传递的参数的值?

在我了解细节之前,我想清楚地表明我确实理解Java是按值传递而不是传递参考,但是我有点困惑,因为我看到一些函数就是这样做的.我想知道他们是怎么做到的.

我想发生什么:

public void yo() {
    int a = 1;
    String b = "hello";
    Boolean c = false;

    doSomething(a,b,c);

    // a,b,c should have new values
}

public void doSomething(int x, String y, Boolean z) {
    // Do Something
}
Run Code Online (Sandbox Code Playgroud)

我见过的功能是这样的:

// Works in Android Development

int[] location = new int[2];
view.getLocationInWindow(location);

// `location` has a new value now
// Same happens when you run getLocationOnScreen(arg)
Run Code Online (Sandbox Code Playgroud)

这是如何运作的?

java android

0
推荐指数
1
解决办法
1611
查看次数

是否可以在Java中传递Array by Value(而不是引用)?

是否可以在Java中的函数中传递Array by Value.当我们在默认情况下在函数中传递数组时,它通过引用传递,并且数组中的原始数据版本被修改.

因此想知道Java中是否存在pass by value选项?

java

0
推荐指数
1
解决办法
2506
查看次数

即使在实例化之后,对象也是空的

我对此代码有疑问:

Object obj = null;
someMethod(obj);
System.out.println(obj.getId());
..
..
void someMethod(Object obj) {
    obj = new Object();
    obj.setId("Id1");
}
Run Code Online (Sandbox Code Playgroud)

上面的代码正在抛出NullPointerException.任何人都可以告诉我为什么即使在方法中实例化之后对象仍然为null?

java

0
推荐指数
1
解决办法
2375
查看次数

通过方法更改变量

为什么我的输出等于5?我期待6,因为在"addthenumber(x);"之后 line,方法被调用,我想的是方法执行计算,5变为6.所以sysout应该打印6,但它是如何5?

public class CodeMomkeyPassingvalue 
{
    public static void main(String[] args) 
    {
        int x = 5;
        addthenumber(x);
        System.out.println(x);
    }

    private static void addthenumber(int number) 
    {
        number = number+1;
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

5
Run Code Online (Sandbox Code Playgroud)

java core

0
推荐指数
1
解决办法
57
查看次数

使用While循环添加到数组列表

我有一个包含书籍的数组列表.我想要做的(出于各种原因)是使用While循环继续将书籍添加到我的数组列表,直到我告诉程序停止.为了让它停止,我使用扫描仪询问人类用户是否应该添加另一本书.如果用户说是,则该方法将重复,否则该方法将停止.

不幸的是,我被困在两个方面(现在).首先,我不知道如何将决定插入到方法中,我试过:

while(decision.equals("Yes"){addBooks(anyTitle,anyAuthor);},
Run Code Online (Sandbox Code Playgroud)

然而,这似乎是错误的,因为它进入一个循环(虽然我想),但它会导致2个问题:A)即使我输入其他东西,该方法也不会结束(除非我使用另一个扫描仪并包含一个中断),和B)相同的输入字段一遍又一遍地插入到数组列表中,而没有给我输入新字符串的机会.

/**
 * Method to add a single book
 */
public void setOneBook(String anyTitle, String anyAuthor){
    bookList.add (new Book(anyTitle,anyAuthor));
}

/**
 * Method to add books to collection until the command to stop is given.
 */
public void addBooks(String anyTitle, String anyAuthor){
    bookList.add (new Book(anyTitle,anyAuthor));
    System.out.println("Would you like to add another book?");
    String decision = keybd.next();
}
Run Code Online (Sandbox Code Playgroud)

我此刻感到非常愚蠢,所以请对自己保持嗤之以鼻的评论.

虽然这样做了,但我会搞乱我的代码,所以如果有任何变化(无论好坏),我会更新我的帖子.

java arraylist while-loop

0
推荐指数
1
解决办法
2081
查看次数

Java 在同一行打印 string 和 int

我试图在同一行上打印字符串和 int。但我得到一个错误。我知道解决这个错误的方法,但是为什么该行System.out.println("This is a string: %i", c2.a);给出错误而该行System.out.println("This is class method" + c2.a );给出正确的输出。下面是我的代码。

public class MyClass
{
  private int a;
  public double b;

  public MyClass(int first, double second)
  {
    this.a = first;
    this.b = second;
  }

  // new method
  public static void incrementBoth(MyClass c1) {
    c1.a = c1.a + 1;
    c1.b = c1.b + 1.0;
  }

  //pass by valuye therefore no change
  public static void incrementA(int a)
  {
    a = a+1;
  }

  public static void main(String[] …
Run Code Online (Sandbox Code Playgroud)

java

0
推荐指数
1
解决办法
1万
查看次数