Каково различие между интервалом и Целым числом в Java и C#?

Этот метод позволяет вам иметь изображение в фоновом режиме, а не только сплошной цвет, и его можно использовать для обеспечения прозрачности других атрибутов, таких как границы. Нет прозрачных изображений PNG.

Используйте :before (или :after) в CSS и дайте им значение непрозрачности, чтобы оставить элемент в его первоначальной непрозрачности. Таким образом, вы можете использовать: прежде, чем сделать faux-элемент и предоставить ему прозрачный фон (или границы), который вы хотите, и переместить его за контент, который вы хотите сохранить непрозрачным с помощью z-index.

Пример ( скрипт ) (обратите внимание, что DIV с классом dad просто для того, чтобы обеспечить некоторый контекст и контрастировать с цветами, этот дополнительный элемент на самом деле не нужен , а красный прямоугольник перемещается немного вниз и вправо, чтобы оставить видимый фон за элементом fancyBg):

Test text that should have solid text color lets see if we can manage it without extra elements

с этим CSS:

.dad {
    background: lime; border: 1px double black; margin: 1ex 2ex;
    padding: 0.5ex; position: relative; -k-z-index: 5;
}
.fancyBg {
    border: 1px dashed black; position: relative; color: white; font-weight: bold;
    z-index: 0; /*background: black;*/
}
.fancyBg:before {content:'-'; display: block;
    position: absolute; background: red; opacity: .5;
    top: 2ex; right: -2ex; bottom: -2ex; left: 2ex;
    /*top: 0; right: 0; bottom: 0; left: 0;*/
    z-index: -1;
}

В этом случае .fancyBg:before имеет свойства CSS, которые вы хотите иметь с прозрачностью (красный фон в этом примере, но может быть изображением или границами). Он позиционируется как абсолютный, чтобы переместить его за .fancyBg (используйте значения нуля или что-то более подходящее для ваших нужд).

254
задан Willi Mentzel 23 September 2016 в 04:50
поделиться

11 ответов

В Java, 'международный' тип является примитивом, тогда как 'Целочисленный' тип является объектом.

В C#, 'международный' тип совпадает с System.Int32 и тип значения (т.е. больше как Java 'интервал'). Целое число (точно так же, как любое другое значение вводит) может быть , упаковал ("обернутый") в объект.

<час>

различия между объектами и примитивами несколько выходят за рамки этого вопроса, но подводить итог:

Объекты предоставляют средства для полиморфизма, передаются ссылкой (или более точно передай ссылки значение), и выделяются от "куча" . С другой стороны примитивы являются неизменными типами, которые передаются значением и часто выделяются от стек .

242
ответ дан Isak Savo 23 November 2019 в 02:48
поделиться

Еще одна вещь, которую я не вижу в предыдущих ответах: В Java примитивные классы оберток как Целое число, дважды, Плавание, булевская переменная... и Строка, как предполагается, являются инвариантными, так, чтобы при передаче экземпляра тех классов вызываемый метод не мог изменить данные всегда в opositiГіn с большинством других классов, какие внутренние данные могли быть изменены его открытыми методами. Так, чтобы это классы только имело методы 'метода get', никакие 'методы set', помимо конструктора.

В программе Java Строковые литералы хранятся в отдельной части памяти "кучи", только экземпляра для литерала, для сохранения памяти, снова использующей те экземпляры

7
ответ дан Jim Anderson 23 November 2019 в 02:48
поделиться

В платформах как Java int с являются примитивами, в то время как Integer объект, который содержит целочисленное поле. Важное различие - то, что примитивы всегда раздаются значением и по определению неизменны.

Любая операция, включающая примитивную переменную всегда, возвращает новое значение. С другой стороны, объекты розданы ссылкой. Можно было утверждать, что точка к объекту (иначе ссылка) также раздается значением, но содержание не.

8
ответ дан Peter Mortensen 23 November 2019 в 02:48
поделиться

Этому уже ответили для Java, вот ответ C#:

"Целое число" не является допустимым именем типа в C#, и "интервал" является просто псевдонимом для Системы. Int32. Кроме того, в отличие от этого, в Java (или C++) нет никаких специальных типов примитивов в C#, каждый экземпляр типа в C# (включая интервал) является объектом. Вот некоторый демонстративный код:

void DoStuff()
{
    System.Console.WriteLine( SomeMethod((int)5) );
    System.Console.WriteLine( GetTypeName<int>() );
}

string SomeMethod(object someParameter)
{
    return string.Format("Some text {0}", someParameter.ToString());
}

string GetTypeName<T>()
{
    return (typeof (T)).FullName;
}
8
ответ дан Wedge 23 November 2019 в 02:48
поделиться

В C# интервал просто псевдоним для System.Int32, строка для System.String, дважды для System.Double и т.д.

Лично я предпочитаю интервал, строку, дважды, и т.д. потому что они не требуют using System; оператор:) Глупая причина, я знаю...

11
ответ дан Ahmad 23 November 2019 в 02:48
поделиться

В Java существует два основных типа в JVM. 1) Типы примитивов и 2) Ссылочные типы. интервал является типом примитива, и Целое число является типом класса (который является видом ссылочного типа).

Примитивные значения не совместно используют состояние с другими примитивными значениями. Переменная, тип которой является типом примитива всегда, содержит примитивное значение того типа.

int aNumber = 4;
int anotherNum = aNumber;
aNumber += 6;
System.out.println(anotherNum); // Prints 4

объект является динамично созданным экземпляром класса или массивом. Ссылочные значения (часто просто ссылки) являются указателями на эти объекты и специальную нулевую ссылку, которая не относится ни к какому объекту. Может быть много ссылок на тот же объект.

Integer aNumber = Integer.valueOf(4);
Integer anotherNumber = aNumber; // anotherNumber references the 
                                 // same object as aNumber

Также в Java все передается значением. С объектами значение, которое передается, является ссылкой на объект. Так другое различие между интервалом и Целым числом в Java то, как они передаются в вызовах метода. Например, в [1 115]

public int add(int a, int b) {
    return a + b;
}
final int two = 2;
int sum = add(1, two);

переменная два передается как примитивный целый тип 2. Принимая во внимание, что в [1 116]

public int add(Integer a, Integer b) {
    return a.intValue() + b.intValue();
}
final Integer two = Integer.valueOf(2);
int sum = add(Integer.valueOf(1), two);

переменная два передается как ссылка на объект, который содержит целочисленное значение 2.

<час>

@WolfmanDragon: Передача ссылкой работала бы как так:

public void increment(int x) {
  x = x + 1;
}
int a = 1;
increment(a);
// a is now 2

, Когда инкремент называют, он передает ссылку (указатель) на переменную . И инкремент функция непосредственно изменяет переменную .

И для типов объектов это работало бы следующим образом:

public void increment(Integer x) {
  x = Integer.valueOf(x.intValue() + 1);
}
Integer a = Integer.valueOf(1);
increment(a);
// a is now 2

Вы видите различие теперь?

19
ответ дан grom 23 November 2019 в 02:48
поделиться

Относительно Java 1.5 и автоупаковка существует важная "причуда", которая прибывает для игры при сравнении Целочисленных объектов.

В Java, Целочисленные объекты со значениями-128 к 127 неизменны (то есть, для одного конкретного целочисленного значения, скажите 23, все Целочисленные объекты, которые инстанцируют через Вашу программу со значением 23 точки к точный тот же объект).

Пример, это возвращает true:

Integer i1 = new Integer(127);
Integer i2 = new Integer(127);
System.out.println(i1 == i2); //  true

, В то время как это возвращает false:

Integer i1 = new Integer(128);
Integer i2 = new Integer(128);
System.out.println(i1 == i2); //  false

== выдерживает сравнение ссылкой (делает точку переменных к тому же объекту).

Этот результат может или не может отличаться, в зависимости от какой JVM Вы используете. Автоупаковка спецификации для Java 1.5 требует что целые числа (-128 к 127) всегда поле к тому же интерфейсному объекту.

решение для А? =), нужно всегда использовать Integer.equals () метод при сравнении Целочисленных объектов.

System.out.println(i1.equals(i2)); //  true
[еще 1114] информация в java.net Пример в bexhuff.com

19
ответ дан andnil 23 November 2019 в 02:48
поделиться

Я просто отправлю здесь, так как некоторые из других сообщений немного неточны относительно C#.

Корректный: int псевдоним для System.Int32.
Неправильно: float не псевдоним для System.Float, но для System.Single

В основном, интервал является зарезервированным словом на языке программирования C# и является псевдонимом для System.Int32 тип значения.

плавание и Плавание не являются тем же однако, как правильным системным типом для'' float'' является Система. Единственный. Существуют некоторые типы как это, которое имеет зарезервированные слова, который, кажется, не соответствует именам типов непосредственно.

В C# нет никакого различия между'' int'' и'' System.Int32'', или ни одна из других пар или типов ключевых слов/системы, за исключением при определении перечислений. С перечислениями можно определить размер ресурса хранения для использования, и в этом случае можно только использовать зарезервированное слово, а не системное имя типа выполнения.

Wether значение в интервале будет сохранено на стеке в памяти, или поскольку объект "кучи", на который ссылаются, зависит от контекста и как Вы используете его.

Это объявление в методе:

int i;

определяет переменную i из типа System.Int32, живущего в регистре или на стеке, в зависимости от оптимизации. То же объявление в типе (структура или класс) определяет членское поле. То же объявление в списке аргумента метода определяет параметр с теми же возможностями хранения что касается локальной переменной. (обратите внимание, что этот абзац не действителен, если Вы начинаете вытягивать методы итератора в соединение, это различные звери в целом)

Для получения объекта "кучи", можно использовать упаковку:

object o = i;

это создаст помещенную в коробку копию содержания [1 113] на "куче". В IL Вы можете методы доступа для "кучи" возражать непосредственно, но в C# необходимо бросить его назад к интервалу, который создаст другую копию. Таким образом объект на "куче" не может легко быть изменен в C#, не создавая новую помещенную в коробку копию нового международного значения. (Тьфу, этот абзац не читает все настолько легко.)

28
ответ дан H. Pauwelyn 23 November 2019 в 02:48
поделиться

Я буду добавлять к превосходным ответам, данным выше, и говорить об упаковке и распаковывании, и как это относится к Java (хотя C# имеет его также). Я буду использовать просто терминологию Java, потому что я - больше в курсе дел с этим.

Как упомянутые ответы, int просто число (названный , распаковал тип), тогда как Integer объект (который содержит число, следовательно упаковал тип). В терминах Java, который означает (кроме неспособности назвать методы на int), Вы не можете сохранить int или другие нетипы объектов в наборах (List, Map, и т.д.). Для хранения их необходимо сначала втиснуть их в его соответствующем помещенном в коробку типе.

Java 5 вперед имеет что-то позвонившее автоупаковка и автораспаковывание , которые позволяют упаковке/распаковыванию быть сделанной негласно. Сравните и контрастируйте: версия Java 5:

Deque<Integer> queue;

void add(int n) {
    queue.add(n);
}

int remove() {
    return queue.remove();
}

Java 1.4 или ранее (никакие дженерики любой):

Deque queue;

void add(int n) {
    queue.add(Integer.valueOf(n));
}

int remove() {
    return ((Integer) queue.remove()).intValue();
}

нужно отметить, что несмотря на краткость в версии Java 5, обе версии генерируют идентичный байт-код. Таким образом, хотя автоупаковка и автораспаковывание очень удобны, потому что Вы пишете меньше кода, эти операции делают , происходят негласно, с теми же затратами во время выполнения, таким образом, все еще необходимо знать об их существовании.

Hope это помогает!

37
ответ дан Chris Jester-Young 23 November 2019 в 02:48
поделиться

Ну, в Java интервал является примитивом, в то время как Целым числом является Объект. Значение, если Вы сделали новое Целое число:

Integer i = new Integer(6);

Вы могли обратиться к некоторому методу я:

String s = i.toString();//sets s the string representation of i

принимая во внимание, что с интервалом:

int i = 6;

Вы не можете назвать методы на нем, потому что это - просто примитив. Так:

String s = i.toString();//will not work!!!

произвел бы ошибку, потому что интервал не является объектом.

интервал является одним из нескольких примитивов в Java (наряду с символом и некоторыми другими). Я не на 100% уверен, но я думаю, что Целочисленный объект более или менее просто имеет международное свойство и целый набор методов для взаимодействия с тем свойством (как toString () метода, например). Таким образом Целое число является необычным способом работать с интервалом (Так же, как, возможно, Строка является необычным способом работать с группой символов).

я знаю, что Java не является C, но так как я никогда не программировал в C, это является самым близким, я мог прийти к ответу. Надежда это помогает!

Целое число возражают Целому числу javadoc

Ojbect по сравнению с международным примитивным сравнением

150
ответ дан Afshin Moazami 23 November 2019 в 02:48
поделиться

int является примитивным типом данных, тогда как Integer является объектом. Создание объекта с помощью Integer даст вам доступ ко всем методам, которые доступны в классе Integer. Но если вы создадите примитивный тип данных с помощью int, вы не сможете использовать эти встроенные методы, и вам придется определять их самостоятельно. Но если вам не нужны какие-либо другие методы и вы хотите сделать программу более эффективной в использовании памяти, вы можете использовать примитивный тип данных, потому что создание объекта увеличит потребление памяти.

0
ответ дан 23 November 2019 в 02:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: